2008-09-29 12 views
11

Ich frage mich, wie man cin verwenden, so dass, wenn der Benutzer keinen Wert eingeben und nur ENTER schiebt, dass cin wird dies als gültige Eingabe erkennen.C++ mit cin lesen ein Return-Zeichen

+0

"The C++ Programming Language" von Bjarne Stroustrup denkt sicherlich, dass cin zurückkehren wird ‚\ Aber ich kann es nicht zur Arbeit bringen. Ich werde einfach die getline Route ausprobieren. –

Antwort

15

Sie wollen wahrscheinlich std::getline versuchen:

#include <iostream> 
#include <string> 

std::string line; 
std::getline(std::cin, line); 
if(line.empty()) ... 
5

Ich finde, dass für die Benutzereingabe std::getline sehr gut funktioniert.

Sie können es verwenden, um eine Zeile zu lesen und einfach verwerfen, was es 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 anderen Müll z.B. "4.5 - about" es ist allzu leicht, aus der Synchronisation zu kommen und zu lesen, was der Benutzer das letzte Mal geschrieben hat, bevor er die Aufforderung druckt, dass er das nächste Mal sehen muss.

Wenn Sie jede vollständige Zeile mit std::getline(std::cin, a_string) lesen und dann die zurückgegebene Zeichenfolge analysieren (z. B. mit einem istringstream oder einer anderen Technik), ist es viel einfacher, die gedruckten Eingabeaufforderungen synchron mit dem Lesen von std :: cin zu halten der verzerrten Eingabe.

0

Versuchen unbuffering cin (es ist standardmäßig gepuffert wird).

1

des Benutzers erfassen Drücken der Eingabetaste, anstatt eine ganze Zahl eingeben:

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