Fscanf dans la boucle while (langage C)
Résolu
oupsman
Messages postés
316
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
le contenu de mon fichier texte est :
Mitterand François H 08/23/47
Bush Georges H 07/28/56
Filon Cristine F 06/21/69
....etc
en gros c'est le nom, le prenom, le sexe et la date de naissance.
une ligne correspond à une personne.
mon algo est une boucle while qui dit que : tant que je ne suis pas en fin de fichier, je recupere le contenu de chaque ligne dans des variables correspondantes et je l'affiche.
voici le code :
<gras>{ ....
/*on suppose que les varibles nom, prenom ... sont déjà déclarées*/
while(fscanf(le_nom_du_fichier, " %s %s %c %s", nom, prenom, &sexe, datenaissance) != EOF)
{
printf("\nRESULTAT %d %s %s %s %c %s\n", nom, prenom, sexe, datenaissance);
}
...
}
Le problème c'est que ça m'affiche uniquement la dernière ligne. Dans l'exemple du fichier au-dessus, s'il y a ces 3 personnes dans le fichier, il ne m'affiche que Filon Cristine F 06/21/69
alors que moi je veux afficher :
Mitterand François H 08/23/47
Bush Georges H 07/28/56
Filon Cristine F 06/21/69
Qu'est-ce qui va pas dans mon programme SVP ?
le contenu de mon fichier texte est :
Mitterand François H 08/23/47
Bush Georges H 07/28/56
Filon Cristine F 06/21/69
....etc
en gros c'est le nom, le prenom, le sexe et la date de naissance.
une ligne correspond à une personne.
mon algo est une boucle while qui dit que : tant que je ne suis pas en fin de fichier, je recupere le contenu de chaque ligne dans des variables correspondantes et je l'affiche.
voici le code :
<gras>{ ....
/*on suppose que les varibles nom, prenom ... sont déjà déclarées*/
while(fscanf(le_nom_du_fichier, " %s %s %c %s", nom, prenom, &sexe, datenaissance) != EOF)
{
printf("\nRESULTAT %d %s %s %s %c %s\n", nom, prenom, sexe, datenaissance);
}
...
}
Le problème c'est que ça m'affiche uniquement la dernière ligne. Dans l'exemple du fichier au-dessus, s'il y a ces 3 personnes dans le fichier, il ne m'affiche que Filon Cristine F 06/21/69
alors que moi je veux afficher :
Mitterand François H 08/23/47
Bush Georges H 07/28/56
Filon Cristine F 06/21/69
Qu'est-ce qui va pas dans mon programme SVP ?
A voir également:
- Fscanf eof
- [C] soucis avec les espaces dans fscanf - Forum C
- La fonction fscanf ou fgets ✓ - Forum C
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
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 ;-)
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);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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.