2014-09-01 14 views
5

Mam problem z odczytywaniem i odróżnianiem pustych wierszy od danych wejściowych.Przeczytaj puste wiersze C++

Oto wejście próbki:

number 

string 
string 
string 
... 

number 

string 
string 
... 

Każda liczba reprezentuje początek wejścia i pusty wiersz po sekwencji łańcuchów oznacza koniec wejścia. Ciąg może być frazą, a nie tylko jednym słowem.

Moje kodu wykonuje następujące operacje:

int n; 

    while(cin >> n) { //number 

    string s, blank; 
    getline(cin, blank); //reads the blank line 

    while (getline(cin, s) && s.length() > 0) { //I've tried !s.empty() 
     //do stuff 
    } 
    } 

Próbowałem bezpośrednio cin >> puste, ale to nie działa.

Czy ktoś może mi pomóc rozwiązać ten problem?

Dzięki!

+0

Mogłeś przeczytać sekwencję z właśnie "cin", prawda? Ponieważ ignoruje wszystkie puste miejsca. Nie ma więc potrzeby czytania pustych miejsc. – Diffy

Odpowiedz

5

Po odczytać numer z tej linii:

while(cin >> n) { //number 

cin niczego nie po ostatniej cyfrze czytać. Oznacza to, że bufor wejściowy cin nadal zawiera resztę linii, w której był włączony numer. Musisz więc pominąć kolejną pustą linię, i. Możesz to zrobić, po prostu używając getline dwa razy. tj.

while(cin >> n) { //number 

    string s, blank; 
    getline(cin, blank); // reads the rest of the line that the number was on 
    getline(cin, blank); // reads the blank line 

    while (getline(cin, s) && !s.empty()) { 
     //do stuff 
    } 
    } 
+0

Dziękuję! To zadziałało :) –

+0

Czy to dlatego, że getLine() przestaje widzieć białą czcionkę. Tak więc 1. getLine() zużyje znak odstępu, a 2. getLine() zajmie pustą linię. Podane rozwiązanie jest prawidłowe. – Diffy

+0

Wtedy nie zostanie nazwany getline ... –

Powiązane problemy