Maison >développement back-end >C++ >Pourquoi `getline()` en C ignore-t-il parfois les entrées de l'utilisateur et comment puis-je y remédier ?
getline() en C : gestion de la mémoire tampon de ligne
En C, getline() est utilisé pour lire l'entrée du flux d'entrée standard cin jusqu'à ce qu'un caractère de nouvelle ligne soit rencontré. Cependant, lorsqu'il est utilisé dans un programme où la saisie de l'utilisateur est demandée, il peut entraîner un comportement inattendu.
Considérez l'extrait de code suivant :
int number; string str; int accountNumber; cout << "Enter number:"; cin >> number; cout << "Enter name:"; getline(cin, str); cout << "Enter account number:"; cin >> accountNumber;
Lorsque ce programme est exécuté, vous remarquerez peut-être qu'après avoir saisi le premier numéro, le programme vous demande immédiatement le numéro de compte sans attendre que vous saisissiez votre nom. En effet, getline() lit le caractère de nouvelle ligne restant dans le tampon d'entrée.
Pour éviter ce problème, vous pouvez utiliser std::ws (espace blanc) avant getline() pour ignorer tous les caractères d'espacement et de nouvelle ligne du flux d’entrée. Cela garantit que getline() lit l'entrée à partir du prochain caractère autre qu'un espace :
cout << "Enter number:"; cin >> number; cout << "Enter name:"; cin >> ws; getline(cin, str); ...
En incorporant cette étape, le programme vous demandera correctement votre nom avant de passer à l'entrée suivante.
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!