Probleme avec fprintf et scanf en C

kwak78 -  
fiddy Messages postés 441 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
Configuration: Mac OS X
Firefox 3.0.7

8 réponses

  1. khalido
     
    bonjour ben jai essayer avec le programme ,mais il sa marche bien
    je pe savoir quel est votre compilateur?
    0
  2. kwak78
     
    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
  3. khalido
     
    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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  6. kwak78
     
    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
  7. kaka
     
    tu n'as pas fermé le fichier avec fclose(fichier) mon frere
    0
  8. Bilow
     
    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
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
    2. Bilow
       
      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
    3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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