Pb fgets en c

Fermé
milou43 Messages postés 13 Date d'inscription mardi 24 août 2010 Statut Membre Dernière intervention 2 juin 2011 - 22 oct. 2010 à 10:58
milou43 Messages postés 13 Date d'inscription mardi 24 août 2010 Statut Membre Dernière intervention 2 juin 2011 - 23 oct. 2010 à 23:56
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


3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
23 oct. 2010 à 09:51
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,
1
ydurce Messages postés 78 Date d'inscription samedi 9 octobre 2010 Statut Membre Dernière intervention 12 décembre 2010 18
23 oct. 2010 à 00:53
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
0
milou43 Messages postés 13 Date d'inscription mardi 24 août 2010 Statut Membre Dernière intervention 2 juin 2011
23 oct. 2010 à 23:56
Merci beaucoup, le getchar(); marche.

Cdlt,
0