C ++ ayant lu un caractère de retour
Question
Je me demandais comment utiliser cin
pour que, si l'utilisateur n'entre aucune valeur et appuie simplement sur ENTER
, ce cin
reconnaîtra ceci comme entrée valide.
La solution
Vous voudrez probablement essayer std :: getline
:
#include <iostream>
#include <string>
std::string line;
std::getline( std::cin, line );
if( line.empty() ) ...
Autres conseils
Je trouve que pour l'entrée utilisateur std :: getline
fonctionne très bien.
Vous pouvez l'utiliser pour lire une ligne et tout simplement supprimer ce qu'elle lit.
Le problème de faire des choses comme ça,
// Read a number:
std::cout << "Enter a number:";
std::cin >> my_double;
std::count << "Hit enter to continue:";
std::cin >> throwaway_char;
// Hmmmm, does this work?
est que si l'utilisateur entre d'autres déchets, par exemple. " 4,5 - à propos de " il est trop facile de se désynchroniser et de lire ce que l'utilisateur a écrit la dernière fois avant d'imprimer l'invite dont il a besoin pour la prochaine fois.
Si vous lisez chaque ligne complète avec std :: getline (std :: cin, a_string)
, puis analysez la chaîne renvoyée (par exemple, en utilisant un istringstream ou une autre technique), il est beaucoup plus facile de conserver les invites imprimées sont synchronisées avec la lecture de std :: cin, même en cas de saisie déformée.
Le film getline résout-il votre problème?
Pour détecter l'utilisateur en appuyant sur la touche Entrée plutôt que d'entrer un entier:
char c;
int num;
cin.get(c); // get a single character
if (c == 10) return 0; // 10 = ascii linefeed (Enter Key) so exit
else cin.putback(c); // else put the character back
cin >> num; // get user input as expected
Alternativement:
char c;
int num;
c = cin.peek(); // read next character without extracting it
if (c == '\n') return 0; // linefeed (Enter Key) so exit
cin >> num; // get user input as expected
Essayez de déconfigurer Cin (il est mis en mémoire tampon par défaut).