2009-08-12 5 views
2
string s; 
getline(cin,s); 

while (HOW TO WRITE IT HERE?) 
{ 
    inputs.push_back(s);  
    getline(cin,s); 
} 

Antwort

8

Da ich zu faul bin heute eine vollständige Antwort zu geben, ich werde einfach einfügen, was die wirklich nützlich bietet in ## C++ auf Freenode zu sagen hat:

Verwendung von „while (Strom! .eof()) {} "ist mit ziemlicher Sicherheit falsch. Verwenden Sie stattdessen den Status des Streams als getesteten Wert: while (std :: getline (stream, str)) {}. siehe Zur weiteren Erläuterung http://www.parashift.com/c++-faq-lite/input-output.html#faq-15.5

Mit anderen Worten, sollte Ihr Code

string s; 

while (getline(cin, s)) 
{ 
    inputs.push_back(s);  
} 
+2

+1 sein. Eine der (leider wenigen) Zeiten in C++, wo die richtige Wahl einfach und idiomatisch ist. –

1
string s; 
getline(cin,s); 

while (!cin.eof) 
{ 
     inputs.push_back(s);  
     getline(cin,s); 
} 
+1

Ja, es funktioniert und ja es beantwortet die Frage wie gesagt, aber ich mag Coppro ist viel besser, ich habe Angst. Die Antwort von coppro wird nicht nur einfacher und wartbarer, sondern auch korrekt beendet, wenn ein anderer E/A-Fehler auftritt. –

+0

Sie haben Recht. Ich habe den "wissen, wann es eof" -Teil nicht geschafft. – Tom