Maison > développement back-end > C++ > Pourquoi `getline()` ignore-t-il l'entrée après avoir utilisé `cin` ?

Pourquoi `getline()` ignore-t-il l'entrée après avoir utilisé `cin` ?

Barbara Streisand
Libérer: 2024-12-08 19:21:10
original
862 Les gens l'ont consulté

Why Does `getline()` Skip Input After Using `cin`?

Résolution du saut d'entrée dans getline()

Lors de l'utilisation de la fonction getline() dans un programme, il est important d'être conscient d'un point commun problème : obtenir une saisie immédiate après avoir saisi un nombre. Ce comportement peut se produire en raison du caractère de nouvelle ligne laissé dans le flux d'entrée après la saisie du nombre.

Examinons un exemple spécifique :

int number;
string str;
int accountNumber;

cout << "Enter number: ";
cin >> number;
cout << "Enter name: ";
getline(cin, str);
cout << "Enter account number: ";
cin >> accountNumber;
Copier après la connexion

Lors de son exécution, ce code se comporte de manière inattendue. Après avoir saisi le numéro, il affiche immédiatement « Entrer le numéro de compte » sans permettre à l'utilisateur de saisir un nom à l'aide de getline(cin, str).

La raison de ce comportement réside dans la façon dont getline() lit l'entrée. Il lit la ligne entière, y compris le caractère de nouvelle ligne. Lorsque vous entrez le numéro et appuyez sur Entrée, la nouvelle ligne est laissée dans le flux d'entrée. Lorsque getline() est appelé, il lit cette nouvelle ligne et renvoie, sans attendre aucune autre entrée. Cela amène le programme à ignorer l'invite « Entrer le nom : ».

Pour résoudre ce problème, vous pouvez utiliser le manipulateur std::ws pour ignorer tout espace de début, y compris le caractère de nouvelle ligne, avant d'appeler getline( ). Voici le code mis à jour :

cout << "Enter number: ";
cin >> number;
cout << "Enter name: ";
cin >> std::ws;
getline(cin, str);
cout << "Enter account number: ";
cin >> accountNumber;
Copier après la connexion

Avec ce changement, le programme se mettra correctement en pause à l'invite « Entrer le nom : » et permettra à l'utilisateur de saisir un nom avant de continuer.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal