Probleme avec fprintf et scanf en C
kwak78
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
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
#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
A voir également:
- Probleme avec fprintf et scanf en C
- Scanf java ✓ - Forum C
- Scanf windows - Guide
- Scanf segmentation fault ✓ - Forum Programmation
- Problème scanf (langage C) ✓ - Forum C
- "Scanf(&s,&n)" ✓ - Forum C
8 réponses
bonjour ben jai essayer avec le programme ,mais il sa marche bien
je pe savoir quel est votre compilateur?
je pe savoir quel est votre compilateur?
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
Je viens d'essayer en passant par les lignes de commandes, sans plus de résultats
Merci de votre aide
ben moi en Dev C++ sous windows xp et sa marche bien
votre code est bien fait
mais cé just un blem de compilation
votre code est bien fait
mais cé just un blem de compilation
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
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
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
Une fois fermé, réouvre le peut-être...
[Ce n'est qu'une idée, suis pas sur ]
[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; }
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. ;-)))
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,
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,