Maison >développement back-end >C++ >Pourquoi `getline()` ignore-t-il l'entrée après avoir utilisé `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;
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;
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!