Pb fgets en c
milou43
Messages postés
13
Date d'inscription
Statut
Membre
Dernière intervention
-
milou43 Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
milou43 Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai un probleme avec fgets en c. j'ai une structure eleve avec nom, prénom, moyenne, avis. pour avis je souhaite que l'utilisateur puisse entrer une phrase dans cette partie j'ai donc tenté d'utiliser fgets. Mais je dois mal l'utiliser puisque par exemple si j'essaie d'ajouter 2 élèves je commence a saisir le nom le prénom la moyenne et lorsque je fais entrer après la moyenne il ne s'arrete pas sur avis et passe directement au deuxième élève.
voila une partie de mon code :
struct Personne
{
char nom[20];
char prenom[20];
float moyenne;
char avis[100];
};
/*Prototypes fonctions et procédures de l'algorithme */
int Menu();
void AjoutEleve (Personne _eleve[Imax], int *nbrEleve );
void SupprimerEleve (Personne _eleve[Imax], int *nbrEleve);
void Affichage (Personne _eleve[Imax], int *nbrEleve );
float Moyenne (Personne _eleve[Imax], float *Moy, int *nbrEleve );
void Classement (Personne _eleve[Imax], int *nbrEleve);
void Enregistrer (Personne _eleve[Imax], int nbrEleve );
void ChargerFichier (Personne _eleve[Imax], int *nbrEleve , int *nbrFichier );
void Modifier (Personne _eleve[Imax], int *nbrEleve);
void Recherche (Personne _eleve[Imax], int *nbrEleve);
int i;
int Choix;
float Moy;
int nbrEleve;
int nbrFichier;
int main()
...
/* Procédure AjoutEleve */
void AjoutEleve (Personne _eleve[Imax], int *_nbrEleve )
{
int i;
int total;
int nbrAjout;
i=1;
printf("Combien voulez-vous ajouter d'eleve\n\n");
scanf("%d", &nbrAjout);
total = *_nbrEleve + nbrAjout;
while(*_nbrEleve < total)
{
*_nbrEleve = *_nbrEleve + 1;
printf("%d", *_nbrEleve);
printf("\neleve %d\n", *_nbrEleve);
printf(" Indiquez son nom\n\n");
scanf("%s", &_eleve[*_nbrEleve].nom);
printf(" Indiquez son prenom\n\n");
scanf("%s", &_eleve[*_nbrEleve].prenom);
printf(" Indiquez sa moyenne de l'année\n\n");
scanf("%f", &_eleve[*_nbrEleve].moyenne);
printf(" Veuillez formuler votre avis sur l'eleve\n\n");
fgets(_eleve[*_nbrEleve].avis, 100, stdin );
i++;
}
}
merci d'avance
j'ai un probleme avec fgets en c. j'ai une structure eleve avec nom, prénom, moyenne, avis. pour avis je souhaite que l'utilisateur puisse entrer une phrase dans cette partie j'ai donc tenté d'utiliser fgets. Mais je dois mal l'utiliser puisque par exemple si j'essaie d'ajouter 2 élèves je commence a saisir le nom le prénom la moyenne et lorsque je fais entrer après la moyenne il ne s'arrete pas sur avis et passe directement au deuxième élève.
voila une partie de mon code :
struct Personne
{
char nom[20];
char prenom[20];
float moyenne;
char avis[100];
};
/*Prototypes fonctions et procédures de l'algorithme */
int Menu();
void AjoutEleve (Personne _eleve[Imax], int *nbrEleve );
void SupprimerEleve (Personne _eleve[Imax], int *nbrEleve);
void Affichage (Personne _eleve[Imax], int *nbrEleve );
float Moyenne (Personne _eleve[Imax], float *Moy, int *nbrEleve );
void Classement (Personne _eleve[Imax], int *nbrEleve);
void Enregistrer (Personne _eleve[Imax], int nbrEleve );
void ChargerFichier (Personne _eleve[Imax], int *nbrEleve , int *nbrFichier );
void Modifier (Personne _eleve[Imax], int *nbrEleve);
void Recherche (Personne _eleve[Imax], int *nbrEleve);
int i;
int Choix;
float Moy;
int nbrEleve;
int nbrFichier;
int main()
...
/* Procédure AjoutEleve */
void AjoutEleve (Personne _eleve[Imax], int *_nbrEleve )
{
int i;
int total;
int nbrAjout;
i=1;
printf("Combien voulez-vous ajouter d'eleve\n\n");
scanf("%d", &nbrAjout);
total = *_nbrEleve + nbrAjout;
while(*_nbrEleve < total)
{
*_nbrEleve = *_nbrEleve + 1;
printf("%d", *_nbrEleve);
printf("\neleve %d\n", *_nbrEleve);
printf(" Indiquez son nom\n\n");
scanf("%s", &_eleve[*_nbrEleve].nom);
printf(" Indiquez son prenom\n\n");
scanf("%s", &_eleve[*_nbrEleve].prenom);
printf(" Indiquez sa moyenne de l'année\n\n");
scanf("%f", &_eleve[*_nbrEleve].moyenne);
printf(" Veuillez formuler votre avis sur l'eleve\n\n");
fgets(_eleve[*_nbrEleve].avis, 100, stdin );
i++;
}
}
merci d'avance
3 réponses
Bonjour,
L'erreur est classique.
Lorsque tu saisis la moyenne il y aura un '\n' (touche entrée) dans le buffer clavier. Ce caractère sera envoyé à fgets et donc t'auras l'impression que l'instruction n'a pas marché.
Il faut donc vider le buffer clavier.
Par exemple avant le fgets : getchar();
Cdlt,
L'erreur est classique.
Lorsque tu saisis la moyenne il y aura un '\n' (touche entrée) dans le buffer clavier. Ce caractère sera envoyé à fgets et donc t'auras l'impression que l'instruction n'a pas marché.
Il faut donc vider le buffer clavier.
Par exemple avant le fgets : getchar();
Cdlt,
bonjour,
la syntaxe scanf("%s", &_eleve[*_nbrEleve].nom); est mauvaise.
en effet 'nom' est un pointeur sur un char et &....nom est un pointeur sur le pointeur, donc scanf va écrire on ne sait trop où, ce qui peut expliquer le comportement 'bizarre' du programme.
(idem pour le prénom)
Pour corriger, enlevez le &.
cdlt
la syntaxe scanf("%s", &_eleve[*_nbrEleve].nom); est mauvaise.
en effet 'nom' est un pointeur sur un char et &....nom est un pointeur sur le pointeur, donc scanf va écrire on ne sait trop où, ce qui peut expliquer le comportement 'bizarre' du programme.
(idem pour le prénom)
Pour corriger, enlevez le &.
cdlt