2012-03-12 12 views
12

Supponiamo che io voglio leggere la linea di una di numeri interi da ingresso in questo modo:tell cin per interrompere la lettura a fine riga

1 2 3 4 5\n 

voglio cin a fermarsi a '\ n' carattere, ma cin non sembra riconoscere esso.

Di seguito è quello che ho usato.

vector<int> getclause() { 
    char c; 
    vector<int> cl; 

    while (cin >> c && c!='\n') {  
    cl.push_back(c); 
    cin>>c; 
    } 
    return cl; 
} 

Come dovrei modificare questo in modo che cin stop quando vede il carattere '\ n'?

+7

cin è delimitata da spazi bianchi, in modo che qualsiasi spazio vuoto (tra cui '\ n ') saranno scartati. Quindi, 'c' non sarà mai' \ n'. – crashmstr

risposta

22

Usa getline e istringstream:

#include <sstream> 
/*....*/ 
vector<int> getclause() { 
    char c; 
    vector<int> cl; 
    std::string line; 
    std::getline(cin, line); 
    std::istringstream iss(line); 
    while (iss >> c) {  
    cl.push_back(c); 
    } 
    return cl; 
} 
+0

Sto diventando variabile 'std :: istringstream iss' ha l'inizializzatore ma il tipo incompleto – Mark

+0

'getline' è anche nello spazio dei nomi' std', penso. –

+2

@Mark: Ciò significa che è necessario "#include ". Questo messaggio indica quasi sempre che un tipo è stato dichiarato ma ti manca la definizione effettiva. In altre parole, ti manca un'intestazione. –

1

Usa std :: getline, questo farà il trucco

2

È possibile utilizzare il metodo getline alla prima ottenere la linea, quindi utilizzare istringstream per ricevere input formattato dalla linea.

Problemi correlati