Ich bin neu hier so nackt mit mir. Ich bin gerade auf diesen Codeabschnitt gestoßen, mit dem Benutzer Zeichenfolgen an der Eingabeaufforderung eingeben können. Ich bin mir bewusst, was sie tun und es ist alles großartig. Aber ich habe eine Frage in Bezug auf die Funktionen cin und getline ().
%Vor%Nun, wenn dies ausgegeben wird, bekomme ich etwas in der Art von: (mit John Smith als Eingabe)
%Vor%Ich verstehe, warum dies passiert, die getline liest immer noch aus dem Eingabepuffer und ich weiß, wie ich es beheben kann. Meine Frage ist, warum gibt es keine neue Zeile nach dem "Bitte geben Sie Ihren vollständigen Namen noch einmal ein"? Wenn ich den Code ändere:
%Vor%Plötzlich bekomme ich einen Zeilenumbruch, nachdem Sie Ihren vollen Namen erneut eingegeben haben. Es ist nicht wirklich ein großes Problem, um ehrlich zu sein. Aber ich hätte nichts dagegen zu wissen, was passiert ist, wenn mir jemand helfen kann. Danke!
Wenn Sie "John Smith" als Eingabe eingeben, wird cin >> name
nicht die gesamte Zeile lesen, sondern den Inhalt der Zeile bis zum ersten Leerzeichen.
Nach der ersten cin
enthält die Namensvariable John
. Es wird immer noch Smith\n
im Puffer geben, und Sie haben das gelöst mit:
Hinweis: Wie Konrad Rudolph vorgeschlagen hat, sollten Sie in Ihrem Code wirklich keine 256 oder andere magische Zahlen verwenden. Verwenden Sie stattdessen std::numeric_limits<std::streamsize>::max()
. Hier ist, was Docs über das erste Argument von istream::ignore
sagt:
%Vor%Maximale Anzahl von Zeichen, die extrahiert (und ignoriert) werden sollen. Wenn dies genau
numeric_limits<streamsize>::max()
ist, gibt es kein Limit: Es werden so viele Zeichen wie benötigt extrahiert, bis delim (oder das Dateiende) gefunden wird.
Meine Frage ist, warum kommt nach dem "Bitte geben Sie noch einmal Ihren vollständigen Namen ein" keine neue Zeile?
Weil Sie keine Ausgabe an die Standardausgabe ausgeben und der Benutzer keine Chance erhält, die Eingabetaste zu drücken. getline
liest Smith\n
aus dem Puffer und wird sofort fortgesetzt. Es werden keine Newline-Zeichen in der Konsole angezeigt - getline
macht das nicht.
Plötzlich bekomme ich einen Zeilenumbruch, nachdem Sie Ihren vollen Namen erneut eingegeben haben. Es ist nicht wirklich ein großes Problem, um ehrlich zu sein. Aber ich hätte nichts dagegen zu wissen, was passiert ist, wenn mir jemand helfen kann. Danke!
Es ist die neue Zeile, die user mit der Enter
-Schlüsseleingabe eingibt, sie kommt nicht von Ihrem Programm.
Bearbeiten Das Drücken der Eingabetaste im Terminal führt normalerweise (abhängig von der Einrichtung des Terminals) zu wenig voneinander getrennten Dingen:
\n
in den Eingabepuffer