Maison >développement back-end >C++ >Pourquoi `getline()` ignore-t-il l'entrée après la lecture d'un entier en C ?

Pourquoi `getline()` ignore-t-il l'entrée après la lecture d'un entier en C ?

DDD
DDDoriginal
2024-12-22 22:28:13303parcourir

Why Does `getline()` Skip Input After Reading an Integer in C  ?

Problèmes de saisie avec getline()

Dans un programme C, vous pouvez rencontrer un comportement particulier lors de l'utilisation de getline() pour lire les entrées de l'utilisateur . Plus précisément, si vous demandez un entier, suivez-le avec getline(cin, str), puis un autre entier, vous remarquerez que « Entrer le numéro de compte » apparaît avant de pouvoir saisir « str ».

Cela se produit car getline() capture également le caractère de nouvelle ligne entré après le premier entier. Pour éviter cela, vous pouvez demander à cin d'ignorer les espaces avant de lire « str ». Voici comment :

cout << "Enter number:";
cin >> number;
cout << "Enter name:";
cin.ignore(numeric_limits<streamsize>::max(), '\n');
getline(cin, str);

Ici, cin.ignore() ignore tout espace, y compris la nouvelle ligne, avant que getline() ne lise l'entrée de l'utilisateur.

Vous pouvez également utiliser cin.get () pour lire et supprimer explicitement le caractère de nouvelle ligne :

cout << "Enter number:";
cin >> number;
cout << "Enter name:";
cin.get();
getline(cin, str);

Cette approche garantit que la nouvelle ligne est consommée et getline() n'essaie pas de le lire.

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