So lesen Sie eine Zeichenfolge mit Leerzeichen use std::getline
.
Aber!
Achten Sie darauf, was mit >>
passiert, wenn es ein Trennzeichen trifft. Es stoppt und hinterlässt den Begrenzer im Stream. Dies ist kein Problem, solange Sie nur >>
verwenden, da >>
alle Leerzeichen verworfen werden. std::getline
wird diese Leerzeichen erfassen und eine gemeinsame usecase ist
user types in number and hits enter
user types in string and hits enter
Also, was passiert? >>
extrahiert die Nummer und stoppt, wenn sie auf Leerzeichen trifft. Dadurch wird das Ende der Zeile im Stream angezeigt, indem Sie im Stream die Eingabetaste drücken. std::getline
kommt mit und das erste, was es sieht, ist ... Ende der Zeile. std::getline
speichert eine leere Zeichenfolge und kehrt sofort zurück. Jetzt verarbeitet das Programm eine leere Zeichenkette, und der Benutzer, der immer noch erwartet, eine Zeichenkette einzugeben, gibt eine Zeichenkette ein, die durch ein zukünftiges Lesen gelesen wird, wodurch der Eingabestrom möglicherweise in einen Fehlerfall versetzt wird und dem Benutzer sicherlich eine Überraschung bringt.
Eine gängige Lösung ist to use ignore(numeric_limits<streamsize>::max(), '\n');
, um alle Daten im Stream bis einschließlich zum Zeilenende zu konsumieren, bevor der Benutzer zur Eingabe aufgefordert und std::getline
aufgerufen wird.
Warum # include? –
Was hast du probiert? Auch * WHY * hält jeder mit '' ?? –
DeiDei