Unerwartetes Verhalten mit getline() in der C-Eingabeschleife
Beim Versuch, Benutzereingaben von der Konsole zu erhalten, stieß ein Entwickler auf ein Rätsel Problem mit der Funktion getline(). Entgegen den Erwartungen wartete das Programm nach dem ersten Aufruf von getline() nicht auf Eingaben und fuhr sofort mit dem nachfolgenden Aufruf fort.
Der bereitgestellte Codeausschnitt veranschaulicht den problematischen Abschnitt:
getline(cin, inputString); getline(cin, inputString);
Dieses Verhalten entsteht durch die Kombination von getline() und dem Eingabeoperator (>>) innerhalb derselben Eingabeschleife. Während >> überspringt führende Leerzeichen, nachfolgende Zeilenumbrüche werden nicht berücksichtigt. Wenn darauf ein getline()-Aufruf folgt, verbleibt die neue Zeile im Eingabepuffer und wird als Teil der nächsten Eingabe interpretiert.
Lösung:
Um dieses Problem zu beheben , ist es notwendig, konsequent entweder getline() oder >> zu verwenden. in der gesamten Eingabeschleife. Wenn alle Eingaben numerisch sind oder effizient analysiert werden können, >> ist eine geeignete Wahl. Wenn es sich jedoch um Zeichenfolgen oder eine Mischung aus Datentypen handelt, sollte getline() verwendet und die numerischen Werte manuell aus den Eingabezeichenfolgen extrahiert werden.
Code-Refactor:
Verwenden von getline() für alle Eingaben:
getline(cin, inputString); getline(cin, inputString); getline(cin, inputUInt); getline(cin, inputUInt); getline(cin, inputDouble);
Alternativ können Sie mit >> für alle numerischen Eingaben:
cin >> inputString; cin >> inputString; cin >> inputUInt; cin >> inputUInt; cin >> inputDouble;
Das obige ist der detaillierte Inhalt vonWarum überspringt meine C-Eingabeschleife getline()-Aufrufe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!