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.

War es hilfreich?

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).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top