Maison >développement back-end >C++ >Pourquoi `getline()` ignore-t-il l'entrée après la lecture d'un entier ?
Problèmes getline() : sauter la nouvelle ligne
Lors de l'utilisation de getline(cin, str) pour récupérer l'entrée de l'utilisateur après avoir lu un entier à l'aide de cin >> numéro, vous pouvez rencontrer un comportement inattendu où l'invite du nom ignore l'entrée de str. Cela se produit parce que getline(cin, str) lit et supprime le caractère de nouvelle ligne laissé par l'entrée entière précédente.
Pour résoudre ce problème, vous pouvez utiliser std::ws avant getline(cin, str) pour ignorer les espaces. , y compris les nouvelles lignes, avant de lire la chaîne. Cela garantit que getline(cin, str) lit correctement l'entrée de l'utilisateur sans sauter l'invite de nom :
int number; string str; int accountNumber; cout << "Enter number:"; cin >> number; cout << "Enter name:"; cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); getline(cin, str); cout << "Enter account number:"; cin >> accountNumber;
En utilisant cin.ignore, vous contournez efficacement tout espace ou nouvelle ligne restant, permettant à getline(cin, str ) pour capturer le nom de l'utilisateur saisi comme prévu.
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!