Lire dans un fichier (C, débutant)

Sancta Terra Messages postés 5 Statut Membre -  
Sancta Terra Messages postés 5 Statut Membre -
Bonjour.

Je suis en train d'essayer de réaliser un programme, mais j'ai un problème :
j'inscrit un nombre dans un fichier (en format int),
je remet le curseur au début du fichier avec fseek(fichier,0 , SEEK_SET);
puis j'essaye de lire le premier chiffre et de le stocker dans un int a avec a = fgetc(fichier);
et quand je fais un scanf("%d", &a); pour que la console affiche le chiffre, elle me répond toujours la même chose : 2293564

Quelqu'un aurait une solution?
Merci à ceux qui essayeront de résoudre mon petit problème!

4 réponses

  1. Neliel Messages postés 7012 Statut Contributeur 1 702
     
    Bonjour,

    Essaie avec des caractères d'abord!
    Remplace:
    int a;
    par :
    char a;

    puis fait : scanf("%d", &a) pour le convertir en chiffre et l'afficher.

    la fonction fgetc renvoie un caractère et non un entier.
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      puis fait : scanf("%d", &a) pour le convertir en chiffre et l'afficher.
      Cela ne convertit pas le chiffre. Cette instruction demande à l'utilisateur d'entrer un nombre au clavier.

      la fonction fgetc renvoie un caractère et non un entier.
      Si justement, fgetc renvoie un entier. La fonction lit en unsigned char et renvoie le caractère en int. Donc, il faut bien mettre int caractere=fgetc(fichier);

      Cdlt,
      0
  2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    et quand je fais un scanf("%d", &a); pour que la console affiche le chiffre
    printf("%d", a); tu veux dire ? Car scanf ce n'est pas pour afficher.

    De plus a=fgetc(fichier) ne te donnera pas le nombre mais le code ASCII du premier caractère.

    Donc tu ne pourras pas lire le nombre 23 par exemple, mais juste le code ASCII du nombre 2.

    Pour lire un nombre : fscanf(fichier,"%d",&a);
    Pour afficher le nombre : printf("%d",a);

    Cdlt,
    0
  3. Neliel Messages postés 7012 Statut Contributeur 1 702
     
    Zut, j'ai fait un copier coller sans réfléchir... abruti que je suis... je voulais dire:

    printf("%d",a);

    Pour fgetc, effectivement, elle renvoie un entier... bizarre.

    "Trotti Trotta, Monsieur P, y'a des anges qui veulent un bisou..."
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Non il n'y a rien de bizarre à ce que fgetc renvoie un int et non un char.
      C'est pour des raisons techniques.
      N'hésite pas si tu veux que je détaille ce point.
      0
    2. Neliel Messages postés 7012 Statut Contributeur 1 702
       
      Ce n'est pas moi l'auteur du sujet mais merci quand même...
      0
    3. Sancta Terra Messages postés 5 Statut Membre
       
      C'est moi l'auteur, mais on s'en fiche un peu ^^
      En fait à l'origine je voudrai lire chiffre par chiffre un nombre, j'avais donc pensé à le mettre dans un fichier pour pouvoir extraire chaque chiffre et les utiliser après (les élever à une puissance par exemple).

      Je vais essayer de bidouiller mon programme avec vos remarques ^^
      0
  4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Pourquoi passer par un fichier alors qu'un simple while suffit ?
    Tu peux récupérer les chiffres en jouant avec le modulo 10 et la division par 10.
    Si jamais tu avais vraiment besoin de passer par un fichier, utilise plutôt les fonctions comme sscanf. Tu pourras traiter la chaîne sans nécessiter de fichier.
    0
    1. Sancta Terra Messages postés 5 Statut Membre
       
      Je vois pas trop comment on pourrai faire ça juste avec les modulo et divisions...
      Par exemple avec le nombre 1000 je voudrai récupérer 1 et 0 et 0 et 0 puis 10 et 00.
      0
    2. Neliel Messages postés 7012 Statut Contributeur 1 702
       
      Ben si...
      Avec 1234 par exemple, tu divise par mille, tu obtient 1,234 puis tu récupère la partie entière que tu stocke dans la variable a par exemple.
      Pour récupérer 2, tu fais 1234/100, tu obtient 12,34, tu récupère la partie entière soit 12 puis tu fais 12 - a*10 et tu aura 2
      ....
      0
    3. Sancta Terra Messages postés 5 Statut Membre
       
      Ouai... Ca va faire des belles boucles tout ça au final, va pas falloir s'emeler les pinceaux ^^
      0
    4. Sancta Terra Messages postés 5 Statut Membre
       
      Hey, j'ai essayé ta technique, à part une erreur de compiilation que je galère à comprendre ça marche et ça m'aide même pour la suite de l'exo ! ;)
      Merci beaucoup, et merci à tout ceux qui s'y sont penchés!
      A une prochaine peut être !
      0