Heim >Backend-Entwicklung >C++ >Warum fordert „getline' nach der Verwendung von „cin' nicht zur Eingabe auf?
getline fordert nicht zur Eingabe auf
Wenn Sie in Ihrem Code getline(cin, mystr); aufrufen, fordert das Programm nicht zur Eingabe auf Benutzer für Eingaben. Dies liegt daran, dass Sie bei der vorherigen Verwendung von cin >> Name; und cin >> i;, das neue Zeilenzeichen, das der Benutzer nach der Eingabe seiner Antwort eingegeben hat, blieb im Eingabepuffer.
Leerraumtrennung
Das >> Der Operator ist durch Leerzeichen getrennt. Das bedeutet, dass, wenn der Benutzer nach der Dateneingabe die Eingabetaste drückt, das Zeilenumbruchzeichen nicht in der Variablen gespeichert wird, sondern im Eingabepuffer verbleibt.
Verhalten von getline
getline ist ebenfalls durch Leerzeichen getrennt. Wenn Sie getline aufrufen, durchsucht es den Eingabepuffer nach einem Zeilenumbruchzeichen. Da das Newline-Zeichen bereits im Puffer vorhanden ist, findet getline sofort, wonach es sucht, und fordert den Benutzer nicht zur Eingabe auf.
Lösung
Um dieses Problem zu beheben , können Sie eine der folgenden Methoden verwenden:
Verbesserter Code:
Hier ist eine verbesserte Version Ihres Codes, die ausschließlich getline verwendet:
#include <iostream> #include <string> #include <sstream> using namespace std; int main() { string name; int age; float price; cout << "Hello World!" << endl; cout << "What is your name? "; getline(cin, name); cout << "Hello " << name << endl; cout << "How old are you? "; getline(cin, age); cout << "Wow " << age << endl; cout << "How much is that jacket? "; getline(cin, price); stringstream(price) >> price; cout << price << endl; system("pause"); return 0; }
Das obige ist der detaillierte Inhalt vonWarum fordert „getline' nach der Verwendung von „cin' nicht zur Eingabe auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!