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:
cin.ignore(); getline(cin, mystr);
int getInt() { string input; getline(cin, input); return stoi(input); }
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!