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
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
A voir également:
- Probleme avec fprintf et scanf en C
- Scanf windows - Guide
- Scanf java ✓ - Forum C
- Sscanf -> char *chaine et char chaine[10] ✓ - Forum Programmation
- Problème avec les espaces avec fprintf (en C) - Forum Programmation
- Scanf getchar ✓ - 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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
22 mars 2009 à 00:33
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
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; }
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
28 mai 2010 à 09:00
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. ;-)))
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
28 mai 2010 à 20:08
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,
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,