49 votes

Utilisation de getline(cin, s) après cin

J'ai besoin du programme suivant pour prendre la ligne entière d'entrée de l'utilisateur et la mettre dans des noms de chaîne :

cout << "Enter the number: ";
int number;
cin >> number;

cout << "Enter names: ";
string names;

getline(cin, names);

Avec le cin >> number avant la commande getline() (ce qui, je suppose, est le problème), il ne me permet pas d'entrer des noms. Pourquoi ?

J'ai entendu quelque chose à propos d'un cin.clear() mais je n'ai aucune idée de la manière dont cela fonctionne ou de la raison pour laquelle cela est nécessaire.

6voto

Vishal Rai Points 51

Essayez cin.ignore() lorsque vous utilisez cin avant la fonction getline()

void inputstu(){
    cout << "Enter roll Number:";
    cin >> roll_no;
    cin.ignore(); //ignore the withspace and enter key
    cout << "Enter name:";
    getline(cin, stu_name);
}

1voto

Pzy64 Points 516

Ou vous pouvez vider le tampon d'entrée pour lire la chaîne de caractères.

fflush(stdin)

il est défini dans l'en-tête stdio.h .

Ce code fonctionne

cout << "Enter the number: ";
int number;
cin >> number;

cout << "Enter names: ";
string names;
fflush(stdin);  //FLUSHING STDIN
getline(cin, names);

1voto

1911 Soldier Points 103

J'ai juste utilisé

getline(cin >> ws,lard.i_npute);

avec la norme

#include <iostream>

dans les cas où j'avais des problèmes avec les retours de chariot et où le manipulateur ws fonctionnait. Je vais probablement commencer à intégrer des fonctions de bouclage dans des classes et à utiliser des appels de constructeur et de destructeur au moins.

1voto

cout << "Enter the number: ";
int number;
cin >> number;

cout << "Enter names: ";
string names;
getline(cin, names);//works on the \n left behind
getline(cin, names);//continues and rewrites names

C'est assez explicite, il y a une \n laissés dans le courant qui cin >> number qui est attribué aux noms la première fois qu'il est utilisé. La réutilisation de la getline écrit maintenant la valeur correcte.

0voto

shuaihanhungry Points 309

Vous pouvez trouver la réponse que vous cherchez dans Référence cpp .

Lorsqu'il est utilisé immédiatement après une entrée délimitée par des espaces blancs, par exemple après int n; std::cin >> n; getline consomme le caractère de fin de ligne laissé sur le flux d'entrée par l'opérateur>>, et retourne immédiatement. Une solution commune est d'ignorer tous les caractères restants sur la ligne d'entrée avec cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); avant de passer à une entrée orientée ligne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X