Maison  >  Article  >  développement back-end  >  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
Barbara Streisandoriginal
2024-11-09 18:22:02527parcourir

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);

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);

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!

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