Maison >développement back-end >C++ >Pourquoi `getline()` ne fonctionne-t-il pas après avoir utilisé l'opérateur d'extraction de `cin` ?

Pourquoi `getline()` ne fonctionne-t-il pas après avoir utilisé l'opérateur d'extraction de `cin` ?

DDD
DDDoriginal
2024-11-11 15:51:02181parcourir

Why Doesn't `getline()` Work After Using `cin`'s Extraction Operator?

Comprendre le comportement de getline()

La fonction getline() en C est utilisée pour lire les caractères de l'entrée standard jusqu'à ce qu'un caractère de nouvelle ligne soit rencontrés. Cependant, les développeurs peuvent rencontrer des problèmes inattendus lors de l'utilisation de getline() après l'opérateur d'extraction de cin (>>).

Description du problème

Les utilisateurs peuvent constater que leur code est ne pas s'arrêter pour recevoir les entrées de l'utilisateur lors de la tentative de capture des messages fournis par l'utilisateur à l'aide de getline(). La cause sous-jacente est liée au comportement de l'opérateur d'extraction cin.

Solution : vider le caractère de nouvelle ligne

Après avoir utilisé l'opérateur d'extraction cin pour lire les données, il laisse une nouvelle ligne caractère (n) dans le tampon d’entrée. Lorsque getline() est appelé immédiatement après, il tombe sur ce caractère de nouvelle ligne et arrête immédiatement la lecture.

Pour résoudre ce problème, il faut vider le caractère de nouvelle ligne du tampon avant d'invoquer getline(). Ceci peut être réalisé en utilisant cin.ignore() comme suit :

string messageVar;
cout << "Type your message: ";
cin.ignore();
getline(cin, messageVar);

En insérant cin.ignore(), le caractère de nouvelle ligne est supprimé, permettant à getline() de lire l'entrée de l'utilisateur comme prévu. Cette technique garantit que l'opérateur cin et getline() fonctionnent successivement sans problème.

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!

Déclaration:
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