Maison > développement back-end > C++ > Pourquoi `cin.ignore()` est-il crucial pour une saisie de chaîne correcte après une saisie numérique en C ?

Pourquoi `cin.ignore()` est-il crucial pour une saisie de chaîne correcte après une saisie numérique en C ?

Susan Sarandon
Libérer: 2024-12-10 18:16:12
original
562 Les gens l'ont consulté

Why Is `cin.ignore()` Crucial for Correct String Input After Numerical Input in C  ?

Démêler l'énigme de cin.ignore() en C

Lors de l'interaction avec les utilisateurs dans les programmes C, des scénarios inattendus comme le saut d'entrées de chaîne peuvent surgir. L'appel apparemment inoffensif cin.ignore() détient la clé pour résoudre des problèmes aussi déroutants.

Pourquoi cin.ignore() est vital

Lorsque l'utilisateur saisit un numéro suivi d'une chaîne, appuyer sur la touche Entrée insère un caractère de nouvelle ligne (« n ») dans le tampon d'entrée. Par la suite, cin >> num; consomme le numéro mais laisse le caractère « n » dans le tampon. Lorsque cin.ignore() est absent, cin >> getline(cin, mystr); lit par inadvertance le caractère 'n' au lieu de la chaîne d'entrée.

La fonction cin.ignore() résout ce problème en ignorant un nombre spécifié de caractères (256 dans notre exemple) ou jusqu'à ce qu'elle rencontre un délimiteur (' n' dans ce cas).

Prédire le besoin de cin.ignore()

La prévision lorsque cin.ignore() est requise implique de comprendre le potentiel de caractères restants dans le tampon d'entrée. Les situations où cela devient essentiel incluent :

  • Après la lecture de nombres (par exemple, cin >> num;)
  • Lorsque la saisie ultérieure est une chaîne (par exemple, cin >> getline(cin, mystr);)
  • Lorsque la saisie inclut des caractères non délimiteurs qui pourraient être involontairement réabsorbé

Exemple : Plonger dans le code

Considérez le programme C fourni :

#include <iostream>
#include <string>

using namespace std;

int main()
{
    double num;
    string mystr;

    cout << "Please enter a number: " << endl;
    cin >> num;
    cout << "Your number is: " << num << endl;
    cin.ignore(256, '\n'); // Ignore any remaining characters
    cout << "Please enter your name: \n";
    getline (cin, mystr);
    cout << "So your name is " << mystr << "? \n";
    cout << "Have a nice day. \n";

}
Copier après la connexion

Insérer le cin.ignore() appeler après cin >> num; garantit que le caractère 'n' est ignoré, permettant ainsi au cin >> getline(cin, mystr); pour lire correctement la chaîne saisie.

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