Heim > Backend-Entwicklung > C++ > Warum überspringt meine C-Eingabeschleife getline()-Aufrufe?

Warum überspringt meine C-Eingabeschleife getline()-Aufrufe?

Linda Hamilton
Freigeben: 2024-11-15 13:24:02
Original
216 Leute haben es durchsucht

Why is My C   Input Loop Skipping getline() Calls?

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);
Nach dem Login kopieren

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);
Nach dem Login kopieren

Alternativ können Sie mit >> für alle numerischen Eingaben:

cin >> inputString;
cin >> inputString;
cin >> inputUInt;
cin >> inputUInt;
cin >> inputDouble;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage