2012-08-29 10 views
9

Also habe ich eine Funktion, die überspringt die erste getline und direkt auf die zweite. Ich habe versucht, den Puffer zu löschen, aber immer noch kein Glück, was ist los?getline() überspringen auch nach dem clear()

void getData(char* strA, char* strB) 
{ 
    cout << "Enter String 1: ";    // Shows this line 
    cin.clear(); 
    cin.getline(strA, 50);     // 50 is the character limit, Skipping Input 

    cout << endl << "Enter String 2: ";  // Showing This Line 
    cin.clear(); 
    cin.getline(strB, 50);     // Jumps Straight to this line 
} 
+0

Ist Ihre Konsole weniger als 50 Zeichen weit nicht entfernen? Standard ist 80, denke ich –

Antwort

10

Achten Sie darauf, nicht cin >> str benutzt haben. vor dem Aufruf der Funktion. Wenn Sie cin >> str verwenden und dann getline(cin, str) verwenden möchten, müssen Sie vorher cin.ignore() aufrufen.

string str; 
cin >> str; 
cin.ignore(); // ignores \n that cin >> str has lefted (if user pressed enter key) 
getline(cin, str); 

Bei c-Strings:

char buff[50]; 
cin.get(buff, 50, ' '); 
cin.ignore(); 
cin.getline(buff, 50); 

ADD: ist Ihr falsch in der Funktion selbst nicht wahrscheinlich, sondern vor die Funktion aufrufen. Der Stream cin muss nur ein neues Zeilenzeichen in der ersten cin.getline lesen.

0

Nachdem Sie etwas gelesen haben, gibt es immer noch "RETURN" -Zeichen in bufor, so dass Sie nach jedem lesen müssen cin.ignore().

Sie können auch cin.sync() verwenden, um den Stream zu löschen. Actualy Clear-Methode löscht nur Flags.

Es gibt auch die Option, dass Sie bis zum Ende des Streams gehen können, mit nichts mehr zu lesen, sollten Sie ohne Probleme schreiben.

std::cin.seekg(0, std::ios::end); 

Es liegt an Ihnen, was Sie verwenden werden.

1

cin.clear(); löscht alle Fehlerbits im Stream - es werden keine Daten verarbeitet, die möglicherweise ausstehen.

Sie möchten cin.ignore() verwenden, um Daten aus dem Stream zu konsumieren.

0

Verwendung cin.ignore(-1); Es wird das erste Zeichen der Eingabezeichenfolge

Verwandte Themen