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
Antwort
Sie wollen wahrscheinlich std::getline
versuchen:
#include <iostream>
#include <string>
std::string line;
std::getline(std::cin, line);
if(line.empty()) ...
Ist cin. getline dein Problem lösen?
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.
Versuchen unbuffering cin (es ist standardmäßig gepuffert wird).
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
"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. –