C++ , gets

Résolu
progfann Messages postés 365 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
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 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
Normal, tu as un \n dans le buffer clavier ;).
Pourquoi ne tout simplement pas utiliser un "cin >> auteur" ?
0
progfann Messages postés 365 Date d'inscription   Statut Membre Dernière intervention   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 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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 365 Date d'inscription   Statut Membre Dernière intervention   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 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > progfann Messages postés 365 Date d'inscription   Statut Membre Dernière intervention  
 
Oui, normal. Il faut définir auteur comme string.
string auteur;
pas de char [100] en C++ sauf cas particulier ;)
0