getline()-Probleme: Überspringen der Newline
Bei Verwendung von getline(cin, str) zum Abrufen von Benutzereingaben nach dem Lesen einer Ganzzahl mit cin >> Wenn Sie die Nummer eingeben, kann es zu einem unerwarteten Verhalten kommen, bei dem die Eingabeaufforderung für den Namen die Eingabe für str überspringt. Dies geschieht, weil getline(cin, str) das von der vorherigen Ganzzahleingabe hinterlassene Zeilenumbruchzeichen liest und verwirft.
Um dieses Problem zu beheben, können Sie std::ws vor getline(cin, str) verwenden, um Leerzeichen zu überspringen , einschließlich Zeilenumbrüchen, bevor Sie die Zeichenfolge lesen. Dadurch wird sichergestellt, dass getline(cin, str) die Benutzereingabe korrekt liest, ohne die Namensaufforderung zu überspringen:
int number; string str; int accountNumber; cout << "Enter number:"; cin >> number; cout << "Enter name:"; cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); getline(cin, str); cout << "Enter account number:"; cin >> accountNumber;
Durch die Verwendung von cin.ignore umgehen Sie effizient alle verbleibenden Leerzeichen oder Zeilenumbrüche, sodass getline(cin, str ), um die Namenseingabe des Benutzers wie vorgesehen zu erfassen.
Das obige ist der detaillierte Inhalt vonWarum überspringt „getline()' die Eingabe nach dem Lesen einer Ganzzahl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!