Maison >développement back-end >C++ >Pourquoi getline() se comporte-t-il de manière inattendue dans une boucle après avoir utilisé « >> » ?

Pourquoi getline() se comporte-t-il de manière inattendue dans une boucle après avoir utilisé « >> » ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-25 16:51:12333parcourir

Why Does getline() Behave Unexpectedly in a Loop After Using `>>`? 
>` ? " />

getline() et entrée console en C

En C , la fonction getline() est utilisée pour extraire une ligne de texte d'un flux, généralement la console. Cependant, lorsqu'elle est utilisée plusieurs fois en boucle, elle peut se comporter de manière inattendue.

Problème :
Lors de la tentative. pour collecter les entrées de l'utilisateur à l'aide de getline() pour les chaînes et >> pour les entiers et les doubles, l'utilisateur ne peut pas saisir la première chaîne. Au lieu de cela, le curseur de la console passe à l'invite de saisie suivante après le deuxième appel getline().

Explication :
Le problème vient du mélange des opérateurs getline() et >> >> ignore les espaces de début et lit l'entrée jusqu'à ce qu'elle atteigne un caractère autre qu'un espace. Cependant, il laisse un caractère de nouvelle ligne (n) dans le flux d'entrée.

Lorsque getline() est appelé après >> ;, il lit le caractère de nouvelle ligne comme une chaîne vide, ce qui entraîne le résultat indésirable comportement.

Solution :

  1. Utiliser l'opérateur >> , respectez cette méthode.
  2. Utilisez getline() De manière cohérente : Si l'entrée implique des chaînes ou un mélange de types, utilisez exclusivement getline() et analysez les nombres des chaînes récupérées. Cela peut être fait en utilisant un stringstream ou une bibliothèque comme Boost.

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