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!

A voir également:

4 réponses

Neliel Messages postés 7012 Statut Contributeur 1 696
 
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
fiddy Messages postés 11653 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
fiddy Messages postés 11653 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
Neliel Messages postés 7012 Statut Contributeur 1 696
 
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
fiddy Messages postés 11653 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
Neliel Messages postés 7012 Statut Contributeur 1 696
 
Ce n'est pas moi l'auteur du sujet mais merci quand même...
0
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
fiddy Messages postés 11653 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
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
Neliel Messages postés 7012 Statut Contributeur 1 696
 
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
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
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