Heim  >  Artikel  >  Backend-Entwicklung  >  Warum bleibt meine C-Funktion „getline()“ hängen, nachdem ich „cin“ verwendet habe?

Warum bleibt meine C-Funktion „getline()“ hängen, nachdem ich „cin“ verwendet habe?

Barbara Streisand
Barbara StreisandOriginal
2024-11-09 18:22:02528Durchsuche

Why does my C   `getline()` function hang after using `cin`?

Verwenden von getline() in C: Fehlerbehebung bei Benutzereingaben

Bei der Verwendung der getline()-Methode zum Abrufen von Benutzereingaben ist es wichtig, dass dies der Fall ist sich einer möglichen Gefahr bewusst. Betrachten Sie den folgenden Code:

string messageVar;
cout << "Type your message: ";
getline(cin, messageVar);

Obwohl versucht wurde, Benutzereingaben einzuholen, bleibt dieser Code auf unbestimmte Zeit hängen und erfasst nie die gewünschte Nachricht.

Ursache des Problems:

Das Problem ergibt sich aus der Tatsache, dass der Cin >> Der Operator hinterlässt ein Zeilenumbruchzeichen n im Eingabepuffer. Dies wird problematisch für getline(), das Eingaben liest, bis auf eine neue Zeile gestoßen wird. Infolgedessen wird getline() vorzeitig beendet, ohne dass eine Eingabe erfolgt.

Lösung:

Um dieses Problem zu beheben, müssen Sie das Zeilenumbruchzeichen aus dem Eingabepuffer leeren bevor Sie getline() aufrufen. Dies kann mit cin.ignore() erreicht werden:

string messageVar;
cout << "Type your message: ";
cin.ignore();
getline(cin, messageVar);

Durch Hinzufügen von cin.ignore() wird das im Puffer verbliebene Newline-Zeichen verworfen, sodass getline() wie erwartet funktionieren kann. Es wartet auf Benutzereingaben und erfasst die eingegebene Nachricht, wenn die Eingabetaste gedrückt wird.

Das obige ist der detaillierte Inhalt vonWarum bleibt meine C-Funktion „getline()“ hängen, nachdem ich „cin“ verwendet habe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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