2014-09-01 3 views
5

Sto riscontrando problemi nella lettura e nella differenziazione di righe vuote da un input.Leggi righe vuote C++

Ecco l'input di esempio:

number 

string 
string 
string 
... 

number 

string 
string 
... 

Ciascun numero rappresenta l'inizio di un ingresso e la riga vuota dopo la sequenza di stringhe rappresenta la fine di un ingresso. La stringa può essere una frase, non solo una parola.

Il mio codice esegue le seguenti operazioni:

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 
    } 
    } 

Ho provato direttamente cin >> vuoto, ma non ha funzionato.

Qualcuno può aiutarmi a risolvere questo problema?

Grazie!

+0

Si potrebbe leggere la sequenza da solo 'cin' giusto? Perché ignora tutti gli spazi vuoti. Quindi non c'è bisogno di leggere spazi vuoti. – Diffy

risposta

5

Dopo aver letto il numero con questa linea:

while(cin >> n) { //number 

cin non legge nulla dopo l'ultima cifra. Ciò significa che il buffer di input di cin contiene ancora il resto della riga su cui si trovava il numero. Quindi, è necessario saltare quella riga, e alla riga vuota successiva. Puoi farlo usando semplicemente getline due volte. Ad esempio

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

Grazie !! Ha funzionato :) –

+0

Non lo è perché getLine() si ferma a vedere un carattere di spazio bianco. Quindi 1st getLine() consumerà il carattere di spazio bianco e il secondo getLine() consumerà la riga vuota. La soluzione data è comunque corretta. – Diffy

+0

Quindi non si chiamerebbe getline ... –