Heim >Backend-Entwicklung >C++ >Warum fordert „getline' nach der Verwendung von „cin' nicht zur Eingabe auf?

Warum fordert „getline' nach der Verwendung von „cin' nicht zur Eingabe auf?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-01 06:48:10675Durchsuche

Why Doesn't `getline` Prompt for Input After Using `cin`?

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:

  1. Anruf ignorieren:Zwischen Verwenden >> und getline, rufen Sie cin.ignore() auf, um das Zeilenumbruchzeichen aus dem Eingabepuffer zu löschen.
  2. Getline ausschließlich verwenden: Anstatt >> zu verwenden, verwenden Sie getline für alle Benutzereingaben. Verwenden Sie stringstream, um die String-Eingabe in den gewünschten Datentyp zu konvertieren.

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!

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