Maison > développement back-end > C++ > Pourquoi ma fonction C `getline()` se bloque après avoir utilisé `cin` ?

Pourquoi ma fonction C `getline()` se bloque après avoir utilisé `cin` ?

Barbara Streisand
Libérer: 2024-11-09 18:22:02
original
567 Les gens l'ont consulté

Why does my C   `getline()` function hang after using `cin`?

Utilisation de getline() en C : Dépannage des entrées utilisateur

Lorsque vous utilisez la méthode getline() pour récupérer les entrées utilisateur, il est crucial d'être conscient d’un écueil potentiel. Considérez le code suivant :

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

Malgré la tentative d'obtenir la saisie de l'utilisateur, ce code se bloque indéfiniment, ne capturant jamais le message souhaité.

Cause du problème :

Le problème vient du fait que le cin >> L'opérateur laisse un caractère de nouvelle ligne n dans le tampon d'entrée. Cela devient problématique pour getline(), qui lit l'entrée jusqu'à rencontrer une nouvelle ligne. Par conséquent, getline() se termine prématurément sans qu'aucune entrée ne soit fournie.

Solution :

Pour résoudre ce problème, vous devez vider le caractère de nouvelle ligne du tampon d'entrée avant d'appeler getline(). Ceci peut être réalisé en utilisant cin.ignore() :

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

En ajoutant cin.ignore(), le caractère de nouvelle ligne laissé dans le tampon est supprimé, permettant à getline() de fonctionner comme prévu. Il attendra la saisie de l'utilisateur et capturera le message saisi lorsque la touche Entrée est enfoncée.

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