C ++ hat cin ein Rücklaufzeichen gelesen
Frage
Ich habe mich gefragt, wie cin
zu verwenden, so dass, wenn der Benutzer in einem beliebigen Wert eingeben nicht und drückt genau die ENTER
cin
wird diese als gültige Eingabe erkennen.
Lösung
Sie werden wahrscheinlich wollen std::getline
versuchen:
#include <iostream>
#include <string>
std::string line;
std::getline( std::cin, line );
if( line.empty() ) ...
Andere Tipps
Ich finde, dass für Benutzereingaben std::getline
funktioniert sehr gut.
Sie können es verwenden, um eine Zeile zu lesen und einfach zu verwerfen, was er liest.
Das Problem mit Dingen wie dies zu tun,
// 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?
ist, dass, wenn der Benutzer gibt andere garbage z.B. „4.5 - über“. Es nur allzu leicht ist nicht synchron zu bekommen und zu lesen, was der Benutzer das letzte Mal schrieb die Aufforderung vor dem Druck, dass er das nächste Mal sehen muß
Wenn Sie lesen jede komplette Linie mit std::getline( std::cin, a_string )
und dann analysieren, um die zurückgegebenen String (zB eine istringstream oder eine andere Technik verwendet wird) ist es viel einfacher, die gedruckten Anweisungen synchron zu halten mit dem Lesen von std :: cin, auch angesichts der verstümmelte Eingang.
Ist cin. getline Ihr Problem zu lösen?
Um den Benutzer zu erfassen, die ENTER-Taste, anstatt die Eingabe eine ganze Zahl:
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
Alternativ:
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
Versuchen Sie nicht Pufferung in (seiner standardmäßig gepuffert).