- De façon générale, il faut être cohérent : pourquoi afficher "donner nom=" pour lire le prénom et "donner prenom=" pour lire le nom ?
- gets() lit une ligne complète (y compris tous le blancs) jusqu'au '\n' inclus (qu'elle ne met pas dans le buffer de destination). On préfère d'ailleurs utiliser fgets() qui est plus sûre (mais qui met le '\n' dans le buffer de destination).
Voir la
: Pourquoi gets est-elle dépréciée en faveur de fgets ?
Je ne pense pas d'ailleurs que ce soit les fonctions les plus appropriées pour faire ce que tu veux.
- Le problème :
Après la lecture de cin, il reste dans le buffer du clavier ce qui a été tapé après le nombre. Il reste donc au moins le '\n'. Le gets() qui suit prend ce '\n', en déduit que la ligne est vide et place 0 dans le buffer pre et le message "donner prenom=" s'affiche aussitôt. Alors seulement, on peut correctement entrer le nom.
Donc, il faut vider le buffer clavier après la lecture du nombre,
soit par la méthode de la
: Comment vider le buffer clavier ?
soit en utilisant le scanf :
scanf("%d%[^\n]%*c",&tab[i].cin);
- Pour terminer, le code ne connait pas personne mais struct personne.
Partager