Fscanf dans la boucle while (langage C)
Résolu/Fermé
oupsman
Messages postés
316
Date d'inscription
mercredi 26 décembre 2007
Statut
Membre
Dernière intervention
22 octobre 2008
-
21 sept. 2008 à 16:40
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 21 sept. 2008 à 19:37
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 21 sept. 2008 à 19:37
A voir également:
- While fscanf
- While en assembleur ✓ - Forum Programmation
- Boucle while excel sans vba - Forum Excel
- Factorielle python while ✓ - Forum Programmation
- Error code 1309 mac while copying ✓ - Forum MacOS
- The i/o cache encountered an error while updating data in medium "ahci-0-0" (rc=verr_disk_full). make sure there is enough free space on the disk and that the disk is working properly. operation can be resumed afterwards. - Forum VirtualBox
5 réponses
Bonjour,
while(fscanf(le_nom_du_fichier, " %s %s %c %s", nom, prenom, &sexe, datenaissance) != EOF)
la fonction fscanf() ne renvoie jamais EOF, elle renvoie le nombre d'items lus, dans votre cas le résultat normal est 4, donc vous devez tester == 4
Vous n'avez sans doute pas copié votre ligne réelle. Je ne serais pas étonné qu'elle se termine par un point-virgule.
Manu
while(fscanf(le_nom_du_fichier, " %s %s %c %s", nom, prenom, &sexe, datenaissance) != EOF)
la fonction fscanf() ne renvoie jamais EOF, elle renvoie le nombre d'items lus, dans votre cas le résultat normal est 4, donc vous devez tester == 4
Vous n'avez sans doute pas copié votre ligne réelle. Je ne serais pas étonné qu'elle se termine par un point-virgule.
Manu
oupsman
Messages postés
316
Date d'inscription
mercredi 26 décembre 2007
Statut
Membre
Dernière intervention
22 octobre 2008
10
21 sept. 2008 à 19:32
21 sept. 2008 à 19:32
En fait c'est un truc tout bête !!!!
dans ma fonction c'était
{
...
while( ...);
{
}
}
Il y avait le point virgule qui s'est glissée juste après la fermeture de la parenthèse de while !!!
En tout cas merci à tous ceux qui m'ont répondu, bonne soirée à tous ;-)
dans ma fonction c'était
{
...
while( ...);
{
}
}
Il y avait le point virgule qui s'est glissée juste après la fermeture de la parenthèse de while !!!
En tout cas merci à tous ceux qui m'ont répondu, bonne soirée à tous ;-)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
21 sept. 2008 à 19:37
21 sept. 2008 à 19:37
Voilà, c'est pour ça que je t'ai demandé de bien faire un copier coller ;)
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
21 sept. 2008 à 17:04
21 sept. 2008 à 17:04
ben deja ton printf il est bizarre...
tu as 4 variables et 6 formats...
ça serait plutot
tu as 4 variables et 6 formats...
ça serait plutot
printf("\nRESULTAT %s %s %c %s\n", nom, prenom, sexe, datenaissance);
oupsman
Messages postés
316
Date d'inscription
mercredi 26 décembre 2007
Statut
Membre
Dernière intervention
22 octobre 2008
10
21 sept. 2008 à 17:28
21 sept. 2008 à 17:28
oui merci, enfin, le problème n'est pas vraiment ça, je n'arrive pas à parcourir ligne par ligne
il ne m'affiche que la dernière ligne
il ne m'affiche que la dernière ligne
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 843
21 sept. 2008 à 18:54
21 sept. 2008 à 18:54
Salut,
Essaie ce code :
Cdt
Essaie ce code :
#include <stdio.h> int main(void){ char nom[15],prenom[15],sexe,date[10]; FILE *fp=fopen("president.txt","r"); while(fscanf(fp,"%s %s %c %s",nom,prenom,&sexe,date)!=EOF){ printf("nom: %s\n",nom); printf("prenom: %s\n",prenom); printf("sexe: %c\n",sexe); printf("date: %s\n",date); } return 0; }
Cdt
oupsman
Messages postés
316
Date d'inscription
mercredi 26 décembre 2007
Statut
Membre
Dernière intervention
22 octobre 2008
10
21 sept. 2008 à 19:06
21 sept. 2008 à 19:06
Salut fiddy,
J'ai essayé ton conseil, ça me donne le même résultat, càd il prend en compte la dernière ligne avant l'EOF. La ligne 1 et 2 ne sont pas affichées.
J'ai essayé ton conseil, ça me donne le même résultat, càd il prend en compte la dernière ligne avant l'EOF. La ligne 1 et 2 ne sont pas affichées.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 843
>
oupsman
Messages postés
316
Date d'inscription
mercredi 26 décembre 2007
Statut
Membre
Dernière intervention
22 octobre 2008
21 sept. 2008 à 19:30
21 sept. 2008 à 19:30
T'as bien fait un copier coller de mon code ?
Car si c'est pas exactement le même, ceci peut expliquer cela.
En tout cas sur mon ordi, le code que je t'ai donné marche bien. Toutes les lignes sont prises en compte.
Car si c'est pas exactement le même, ceci peut expliquer cela.
En tout cas sur mon ordi, le code que je t'ai donné marche bien. Toutes les lignes sont prises en compte.
21 sept. 2008 à 18:59
la fonction fscanf teste bien un EOF, j'ai vu ça dans un tuto.
preuve : j'ai le fichier nombres.txt
son contenu est
1
2
3
4
5
6
7
voici mon code :
int main(){
FILE * fic;
int nombre;
fic = fopen("nombres.txt", "r");
if(fic == NULL){
printf("Impossible d'ouvrir le fichier %s\n", "nombres.txt");
exit(1);
}
while(fscanf(fic, "%d", &nombre) != EOF){
printf("\nRESULTAT : %d\n", nombre);
}
if(fclose(fic) == EOF){
printf("\nProbleme de fermeture du fichier %s\n", "nombres.txt");
exit(1);
}
return 0;
}
Et comme résultat il m'affiche bien :
RESULTAT : 1
RESULTAT : 2
RESULTAT : 3
RESULTAT : 4
RESULTAT : 5
RESULTAT : 6
RESULTAT : 7
Conclusion : le teste d'EOF fonction réellement.