Heim > Backend-Entwicklung > C++ > Warum fordert „getline' in C nicht zur Eingabe auf?

Warum fordert „getline' in C nicht zur Eingabe auf?

Barbara Streisand
Freigeben: 2024-11-29 14:14:14
Original
467 Leute haben es durchsucht

Why Doesn't `getline` Prompt for Input in C  ?

getline fordert nicht zur Eingabe auf: Ein Fall von Pufferproblemen

Bei der Verwendung von getline(cin, mystr) in C kann es zu einem Problem kommen Problem, bei dem der Benutzer nicht zur Eingabe aufgefordert wird und stattdessen der Preisvariablen der Anfangswert „0“ zugewiesen wird. Dies liegt daran, dass getline die Eingabe liest, bis es auf ein Zeilenumbruchzeichen ('n') stößt, und möglicherweise ein verbleibendes Zeilenumbruchzeichen im Eingabepuffer vorhanden ist.

Das Problem tritt auf, wenn Eingabestream-Operatoren wie >> gemischt werden. mit getline. Wenn Sie cin >> Um eine Ganzzahl zu lesen, folgt auf die Eingabe des Benutzers ein Zeilenumbruchzeichen. Dieser Zeilenumbruch verbleibt jedoch im Eingabepuffer. Wenn Sie anschließend getline aufrufen, interpretiert es das Newline-Zeichen als Eingabe, ohne den Benutzer dazu aufzufordern.

Mögliche Lösungen:

  • Newline-Zeichen ignorieren : Bevor Sie getline aufrufen, verwenden Sie cin.ignore(), um das Newline-Zeichen aus dem Eingabepuffer zu entfernen. Zum Beispiel:
cin.ignore();
getline(cin, mystr);
Nach dem Login kopieren
  • Benutzerdefinierte Eingabefunktionen verwenden: Schreiben Sie eine Funktion, die Eingaben als Zeichenfolge liest und sie in den gewünschten Datentyp umwandelt, wobei Zeilenumbrüche verarbeitet werden angemessen. Zum Beispiel:
int getInt() {
  string input;
  getline(cin, input);
  return stoi(input);
}
Nach dem Login kopieren
  • Vermeiden Sie >> zur Eingabe: Verwenden Sie getline ausschließlich zur Eingabe und konvertieren Sie die Zeichenfolge in den gewünschten Datentyp. Dieser Ansatz erhöht die Sicherheit und Robustheit des Codes.

Empfohlene Vorgehensweise:

Es ist eine bewährte Vorgehensweise, getline für alle Eingaben zu verwenden und sicherzustellen, dass Zeilenumbruchzeichen ordnungsgemäß verarbeitet werden Eingaben werden immer abgefragt. Vermeiden Sie das Mischen von >> mit getline, um diese Pufferprobleme zu verhindern.

Das obige ist der detaillierte Inhalt vonWarum fordert „getline' in C nicht zur Eingabe auf?. 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