Maison > développement back-end > C++ > Pourquoi `getline()` échoue-t-il après avoir utilisé `cin` avec `>>` en C ?

Pourquoi `getline()` échoue-t-il après avoir utilisé `cin` avec `>>` en C ?

DDD
Libérer: 2024-11-12 04:59:02
original
785 Les gens l'ont consulté

Why Does `getline()` Fail After Using `cin` with `>>` en C ? 
` en C ? " />

Comprendre getline() en C

Lors de l'utilisation de la méthode getline() pour récupérer les entrées de l'utilisateur en C , il est important de se rappeler un problème courant qui Lorsqu'il est utilisé immédiatement après avoir utilisé cin avec l'opérateur >>, getline() peut ne pas capturer correctement les entrées de l'utilisateur.

Le Problème :

Considérons l'extrait de code suivant :

string messageVar;
cout << "Type your message: ";
getline(cin, messageVar);
Copier après la connexion

Dans ce code, il est prévu que getline() lise les entrées de l'utilisateur et les stocke dans messageVar. dans certains cas, getline() s'arrête prématurément, laissant messageVar vide.

Le Solution :

Pour résoudre ce problème, il est nécessaire de vider le caractère de nouvelle ligne restant dans le tampon d'entrée lors de l'opération cin >> précédente. :

string messageVar;
cout << "Type your message: ";
cin.ignore();
getline(cin, messageVar);
Copier après la connexion

Raison du problème :

Lors de l'utilisation du >>, il lit l'entrée jusqu'à ce qu'un caractère d'espacement (par exemple, un espace ou une nouvelle ligne) soit rencontré. Cependant, il laisse le caractère de nouvelle ligne dans le tampon d'entrée, ce qui fait que getline() arrête la lecture car il interprète la nouvelle ligne comme la fin. d'entrée. En utilisant cin.ignore(), le caractère de nouvelle ligne est supprimé du tampon, permettant à getline() de fonctionner correctement.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal