Wie kann ich cin.get() zum erkennen eines leeren user-Eingabe?
Ich geschrieben habe einige code, um festzustellen, leeren Benutzer-input:
if(cin.get() == '\n')
{
cout<<"ENTER WAS PRESSED"<<endl;
}
Aber aus irgendeinem Grund, wenn der Benutzer die EINGABETASTE drückt es hält nur die Weiterentwicklung, um die nächste Zeile, wie ich drücken Sie die EINGABETASTE.
- Ich glaube, Sie haben zu verwenden noskipws oder etwas entlang jenen Linien. Standardmäßig cin überspringt Leerzeichen und \n sind Leerräume IIRC.
- Sorry, ich vergaß zu erwähnen, dass der Benutzer soll eine Zahl eingeben und ich wollte wissen, was zu tun ist, um sicherzustellen, dass, wenn der Benutzer die EINGABETASTE drückt dann die Warnmeldung
- Halten Sie Fragen, bis Sie bekommen, was Sie wollen?
- Leerzeichen und
/n
sind verschiedene entites. Sie werden anders behandelt, indem der compiler. Auch Der ASCII-Wert des whitespace-Zeichen 32, während\n
10. - Der C++ - compiler behandelt
\n
als Leerraum für alle Kontexte, die hier diskutiert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dieser code macht Ihren job.
AFAIK, ich denke, dass sollten Sie nicht verwenden die
get()
- Funktion, um zahlen einzugeben. Dieget()
Funktion wurde entwickelt, um die Zeichen und es verhält sich wie ein Unformatierte Eingabe-Funktion. Die>>
Betreiber scheint besser für diesen job. Die Extraktion Betreiber>>
wartet auf Ihre Eingabe, wenn Sie die ENTER-Taste drücken, weil er ignoriert es. Jedoch, das neue-Zeile-Eingabe ist gespeichert in dercin
input-stream. Sie können auch versuchen, eine Kombination derpeek()
und dieseekg()
Funktion zu prüfen, eine vorhandene newline-Eingabe in dem Eingabe-stream und tun, was Sie wollen.In dieser form ist dein code funktioniert bei mir:
Aber deine weiteren Kommentare zeigen, dass Ihr code gehört auch dieses:
Es ist Ihre Mühe.
Was Sie versuchen, wird nicht funktionieren mit, dass insbesondere
while
, aber viele first-Begriff, der Studierenden der C++ - ähnliche Fragen stellt, so lassen Sie mich erklären. Der Grund dafür, dass es nicht funktionieren wird, ist, dass Ihr Konzept derstd::cin
ist vage. (Übrigensstd::cin
bitte, odercin
vorangestelltusing std::cin;
wenn Sie müssen. Das Textbuch, das sagt Sie zum Themausing namespace std;
verbrannt werden sollten.)Objekt
std::cin
ist ein stream—aus Ihrer Sicht, eine Warteschlange aus, die Ihr Programm akzeptieren kann, zur Verfügung-input-Zeichen, wenn es dies wünscht. Wichtig:std::cin
ist nicht ein Befehl oder ein Vorgang, sondern ein Objekt namens stream. Durch Analogie mit der Sprache, Sie können sich denken, vonstd::cin
als verb, nur es nicht ist: es ist ein Substantiv. Von selbst,std::cin
tut man nicht alles.Was bedeutet etwas tun, ist die Extraktion Betreiber
>>
. Was auch etwas tut, ist der Einzel-Zeichen Holen member-Funktion.get()
. Beide diese zuvor unsichtbaren Zeichen aus dem streamstd::cin
. So, die>>
ruft einige Zeichen, die das Programm bringt innumber
, dann tests. Dann die.get()
ruft anderen vorher unsichtbaren Zeichen, die das Programm prüft, ob es ein Zeilenumbruch ist. Aber warum hat Ihr Programm Behandlung der ersten Gruppe von Zeichen als eine Zahl und die letztere, den einzelnen Charakter als eine mögliche newline? Woher weiß er, dass die ehemalige Gruppe von Zeichen, beginnt nicht mit einem newline?Mein Vorschlag ist, zu versuchen, einige einfachere test-Programme für eine Weile, entweder
>>
oder.get()
, aber nicht beide im gleichen Programm. Jetzt, mit beiden auf einmal ist verständlicherweise verwirrt. Stream input, kann schwierig sein. Sie sind kaum profitieren Sie von weiteren Erklärung, bis Sie diesen Punkt direkt in Ihrem Kopf, und das wird wahrscheinlich nehmen Sie eine Stunde von Versuch und experiment. Viel Glück.bar()
. Angenommen, Sie versehentlich zu beziehen, um es später alsbaz()
. Kein problem, richtig? Das compiler-flag für Sie. Jedoch, angenommen, dass die standard-Bibliothek bietet einestd::baz()
. Was passiert nach dem "using namespace std;"? Besser ist "using std::baz;" die, anstatt dumping Hunderte von standard-Bibliothek Symbole der Programmierer nicht weiß, importiert nur die eine gewünschte symbol.