#1 Le 21/03/2015, à 21:19
- elkev
Priorité des "printf" en C? [RESOLU]
Bonjour à tous,
J'ai une question qui me taraude;
en fait, j'essayais de faire une sortie vers un fichier en envoyant comme argument a une fonction externe pour écrire un tableau, et pouvoir aussi rajouter des variables non tableaux depuis le main dans mon fichier de sortie.
void ecriture (int n, double tableau[n], FILE* pfich)
il se trouve qu'on peut apparemment pas envoyer un pointeur déjà attribué vers un flux a cette fonction (ce que j'ai voulu faire dans le main), donc j'ai laissé tomber cette solution.
j'ai envisagé autre chose ensuite, ce qui est pas extrêmement utile ni malin, mais bon;
disons que j'attribue un nom de fichier de sortie, puis j'ouvre un flux vers ce fichier tant dans le main que dans la procédure "ecriture", qui resseble donc a ça :
void ecriture (int n, double tableau[n], char* lefichier)
bref, je vous copie la partie utile du code (en fait, c'est tout le code, puisque c'est un test pour pouvoir m'en servir dans un programme plus étoffé disons ) :
void ecriture (int n, double tableau[n], char* lenom) {
FILE* pfich = NULL;
pfich = fopen (lenom, "a");
for (int i=0; i< n; i++) {
fprintf(pfich, "%lg ", tableau[i]);
} ;
return;
}
} ;
et voia le main
int main(void) {
FILE* pfich = NULL;
char* lenom = "resultats.dat";
pfich = fopen (lenom, "a");
int n = 4;
double letab[n];
for (int i=0; i< n; i++){
letab[i] = i;
};
ecriture(n, letab, lenom);
fprintf(pfich, "a \n ");
ecriture(n, letab, lenom);
exit(0);
}
Maintenant, le truc completement effarant, c'est que je récupère ça en sortie dans mon fichier results.dat
0 1 2 3 0 1 2 3 a
Je me demande donc: y'a-t-il une priorité d'exécution des fonctions sur les fprintf dans le main? il semblerait...
Et comment régler ce souci? puisque j'ai a priori pas forcément envie de faire un retour a la ligne dans m fonction écriture (en fait, j'ai vaiment pas envie, je veux pouvoir concaténer les données du tableau et celles d'autres variables, par exemple des double, sur une même ligne, puis sauter la ligne...)
avez vous des idées?
Merci beaucoup pour votre aide, et bonne soirée à tous.
Cheers
Dernière modification par elkev (Le 22/03/2015, à 10:52)
Hors ligne
#2 Le 21/03/2015, à 21:45
- Braun
Re : Priorité des "printf" en C? [RESOLU]
Bonsoir,
Deux détails m'échappent :
1/ Où et quand fermes tu les fichiers ouverts ?
2/ Le même fichier de clef « lenom » est ouvert dans main( ) et dans ecriture( ) ?
J'ai du zapper quelque chose.
Hors ligne
#3 Le 21/03/2015, à 23:13
- elkev
Re : Priorité des "printf" en C? [RESOLU]
1) Tu as raison, j'avais oublié de faire fclose; en fait, ça ne change malheureusement pas mon problème....
(j'ai fait close (pfich) à la fin de "ecriture.c" et aussi a la fin de "main.c", juste avant le return et le exit respectivement).
2) oui j'ai bien ouvert le meme fichier dans les deux cas, c'est justement parceque je veux pouvoir écrire une ligne avec
- le tableau "tableau"
- la valeur d'une autre variable quelconque (ici, j'ai mis a \n pour le test et pour pouoir changer de ligne "manuellement" entre deux impressions de tableau)
est-ce plus clair?
désolé des imprécisions...
Hors ligne
#4 Le 22/03/2015, à 10:51
- elkev
Re : Priorité des "printf" en C? [RESOLU]
Bon,donc la réponse était en effet liée aux ouvertures et fermetures des flux vers le fichier de sortie;
j'ai résolu le problème en faisant ça:
ecriture(n, letab, lenom);
pfich = fopen (lenom, "a");
fprintf(pfich, "\n ");
fclose(pfich);
ecriture(n, letab, lenom);
(rien d'autre n'a changé, j'ai fait le fclose a la fin (juste avant le return) dans "ecriture"). et là j'obtiens bien le résultat escompté
0 1 2 3
0 1 2 3
Merci pour l'aide en tout cas! si quelqu'un connaît une méthode pour pouvoir transmettre le pointeur déjà lancé vers un flux -vers un fichiers donc- à une fonction, comme je pensais le faire au départ, je suis preneur!
Merci à tous.
Hors ligne