C++ , gets

Résolu
progfann Messages postés 373 Statut Membre -  
fiddy Messages postés 11653 Statut Contributeur -
Bonjour,


j'ai un probleme avec le gets

voila ma fonction:

void Livre::lire(){
                  cout<<"Entrer l'annee : ";
                  cin>>annee;
                  cout<<"Entrer le titre : ";
                  gets(titre);
                  cout<<"Entrer l'auteur : ";
                  gets(auteur);
                  }


lors de l'execution il m'affiche:
Entrer l'annee: // et puis j'entre l'annee
Entrer le titre : Entrer l'auteur : // ici je peux juste auteur, il saute le titre


d'ou vient le probleme? merci

2 réponses

fiddy Messages postés 11653 Statut Contributeur 1 847
 
Salut,
Normal, tu as un \n dans le buffer clavier ;).
Pourquoi ne tout simplement pas utiliser un "cin >> auteur" ?
0
progfann Messages postés 373 Statut Membre 23
 
parce que mes chaines contiennent des espaces.
OK ça va maintenant j'ai ajouté le fflush(stdin) pour vider le buffer.
Merci à vous,
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Bah, tu as juste à faire :
getline(cin, auteur)

Pas besoin d'utiliser gets ;). Qui plus est gets est vraiment déconseillé, même en C.

De plus, fflush() n'est pas définie sur les entrées comme stdin. Pour vider le buffer clavier :
En C, on utilise :
 while((c=getchar())!='\n' && c!=EOF);

Et en C++, on utilise :
cin.ignore(numeric_limits<int>::max(), '\n');
0
progfann Messages postés 373 Statut Membre 23
 
j'ai essayé le getline(cin,auteur); mais il me retourne une erreur:
no matching function for call to `getline(std::istream&, char[100])'
et j'ai les using namaspace std

Merci pour l'info
0
fiddy Messages postés 11653 Statut Contributeur 1 847 > progfann Messages postés 373 Statut Membre
 
Oui, normal. Il faut définir auteur comme string.
string auteur;
pas de char [100] en C++ sauf cas particulier ;)
0