Lire dans un fichier (C, débutant)

Fermé
Sancta Terra Messages postés 5 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 21 avril 2010 - 20 avril 2010 à 12:30
Sancta Terra Messages postés 5 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 21 avril 2010 - 21 avril 2010 à 21:56
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 6146 Date d'inscription jeudi 9 juillet 2009 Statut Contributeur Dernière intervention 20 mars 2017 1 691
20 avril 2010 à 12:33
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
20 avril 2010 à 12:55
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
20 avril 2010 à 12:51
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 6146 Date d'inscription jeudi 9 juillet 2009 Statut Contributeur Dernière intervention 20 mars 2017 1 691
Modifié par Neliel le 20/04/2010 à 12:59
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
20 avril 2010 à 13:58
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 6146 Date d'inscription jeudi 9 juillet 2009 Statut Contributeur Dernière intervention 20 mars 2017 1 691
20 avril 2010 à 14:00
Ce n'est pas moi l'auteur du sujet mais merci quand même...
0
Sancta Terra Messages postés 5 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 21 avril 2010
20 avril 2010 à 14:16
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 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
20 avril 2010 à 15:18
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 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 21 avril 2010
20 avril 2010 à 15:39
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 6146 Date d'inscription jeudi 9 juillet 2009 Statut Contributeur Dernière intervention 20 mars 2017 1 691
20 avril 2010 à 15:43
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 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 21 avril 2010
20 avril 2010 à 15:55
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 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 21 avril 2010
21 avril 2010 à 21:56
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