Probleme avec fprintf et scanf en C

Fermé
kwak78 - 21 mars 2009 à 22:02
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 28 mai 2010 à 20:08
Bonjour, j'ai un probleme avec le code ci dessous

#include <stdio.h>

int main (int argc, const char * argv[])
{
char chaine[10];
FILE* sortie = fopen("test.txt", "w+");

while(1)
{
scanf("%s", chaine);
fprintf(stdout, "%s\n", chaine);
fprintf(sortie, "%s\n", chaine);
}

return 0;
}


Lorsque je fais ma saisie, le programme affiche bien le texte à l'ecran, mais il n'ecrit rien dans le fichier.
Est ce que quelqu'un sait d'ou le probleme peut venir ?
Merci de votre aide

8 réponses

bonjour ben jai essayer avec le programme ,mais il sa marche bien
je pe savoir quel est votre compilateur?
0
J'utilise Xcode sous MacOs, avec gcc.
Je viens d'essayer en passant par les lignes de commandes, sans plus de résultats

Merci de votre aide
0
ben moi en Dev C++ sous windows xp et sa marche bien
votre code est bien fait
mais cé just un blem de compilation
0
D'accord, merci pour votre aide.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
22 mars 2009 à 00:33
Salut,
Il y a un autre problème. Tu oublies de fermer ton fichier. Dans ton cas, puisque tu fais une boucle infinie (utilise fflush(sortie); pour forcer l'écriture dans le fichier). D'ailleurs, je te conseillerais de faire une sortie un peu plus propre, comme while chaine[0]!='\n'. Pour quitter, t'entres juste une ligne vide. Ainsi tu pourrais mettre un fclose(sortie) et synchroniser l'écriture du fichier.
Ceci peut expliquer pourquoi tu n'as rien dans ton fichier (mais cela peut-être également un problème externe).
Cdlt
0
J'ai fait les changements que vous proposiez, mais il n'y a eu aucun changement.

Cependant, j'ai essayer de compiler mon programme sur les serveurs de mon école, et la, "miracle", ça fonctionne correctement. ça doit donc etre un probleme externe.
Merci de votre aide
0
tu n'as pas fermé le fichier avec fclose(fichier) mon frere
0
Une fois fermé, réouvre le peut-être...
[Ce n'est qu'une idée, suis pas sur ]
#include <stdio.h> 

int main (int argc, const char * argv[]) 
{ 
char chaine[10]; 
FILE* sortie = NULL; // Indispensable pour mon compilateur aumoins !

while(1) 
{ 
fopen("test.txt", "a"); // Pour à chaque fois ajouter une ligne; 
scanf("%s", chaine); 
fprintf(stdout, "%s\n", chaine); 
fprintf(sortie, "%s\n", chaine); 
fclose(sortie);
} 

return 0; 
} 
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
28 mai 2010 à 09:00
Autant ne pas fermer le fichier si c'est pour le rouvrir à chaque fois. Un simple fflush fait l'affaire pour vider le flux de manière explicite. Le problème, je pense, était externe comme il a dit. Peut-être que fopen échouait vu que la valeur de retour n'était pas testé. Quoiqu'il en soit son problème date de plus d'un an, je doute qu'il cherche encore. ;-)))
0
Oui... Je ne connais pas le 'flush'; Mais je pense que le problème est lors de l'initialisation, il doit être mis à NULL. Bye ;)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
28 mai 2010 à 20:08
Non le problème n'est pas lors de l'initialisation.
D'ailleurs, l'initialisation n'est pas obligatoire en C.
Tu as l'impression que c'est obligatoire car dans ton programme tu as fait une étourderie :
fopen("test.txt", "a");
fopen va te renvoyer un pointeur sur un flux permettant l'écriture dans le fichier. Sauf que t'as oublié de sauvegarder la valeur de retour dans la variable "sortie".
Du coup quand tu fais : fprintf(sortie,...) ton compilateur crie si sortie n'a pas été initialisée.
Ton programme n'écrit donc pas dans le fichier "test.txt". Il faudrait que tu mettes : sortie=fopen... Et dans ce cas-là, tu peux enlever l'initialisation à NULL.

Mais comme dis plus haut, c'est clairement pas une bonne chose d'ouvrir et fermer le fichier alors qu'un simple fflush suffit.
L'erreur a été dit plus haut.

Cdlt,
0