2016-04-12 7 views
0

i eine while-Schleife und Code haben unterVerlassen Sie eine while-Schleife, cin. mit Strg-Z/Strg + D nicht funktioniert C++

string namn, word; 

while(getline(cin, namn)){ 
    istringstream iss(namn); 
    vector<string> v; 
    while(iss >> word){ 
     v.push_back(word); 
    } 
    for(auto elements: v){ 
     cout << elements << endl; 
    } 
} 
cout << "do something" <<endl; 

, wenn ich den Code die Schleife laufen funktioniert gut, aber ich ctrl-Z nicht beenden können die Schleife (in Fenster)

ich habe auch die unten versucht:

int main(){ 
    string namn; 
    string pris; 
    string antal; 
    vector<string> v; 
    while(cin >> namn >> pris >> antal){ 
    v.push_back(namn); 
    v.push_back(pris); 
    v.push_back(antal); 
    } 
    // do something with the vector maybe print it 
    // i can not exit the loop and continue here 
    return 0; 

} 

i auch dritte Lösung versucht, aber es funktioniert nicht entweder:

int main(){ 
    string name; 
    vector<string> v; 

    while(!cin.eof()&& cin.good()){ 
    cin >> name; 
    v.push_back(name); 
    } 
    // after exiting the loop with ctrl-Z (in windows, ctrl-d in linux) 
    // do something with the vector, but it never goes here 


} 

Die Aufgabe, die ich tue oder lösen werde ist, dass Sie mehrere Eingaben in einer Zeile haben, zum Beispiel Name, Preis, Betrag. dann werde ich diese Elemente in einem Vektor speichern. Der Ausgang sollte mit der Verwendung von Strg-Z nicht quit oder etwas anderes eingeben.

+0

Haben Sie die Eingabetaste nach ctrl-z gedrückt? Versuchen Sie, einen Bruch hinzuzufügen, wenn namn.empty() die Schleife mit einer leeren Zeile beendet. –

Antwort

0

Anscheinend gibt std::basic_ios::operator bool() zurück, ob der Stream nicht ausgefallen ist, und es ist nicht das gleiche wie !eof(). Wahrscheinlich müssen Sie Ihren Zustand in while(cin >> namn >> pris >> antal && !cin.eof()) ändern.

+0

hmm, habe ich diesen Ausdruck ohne Glück, noch mehr Vorschläge versucht? – Jim

0

ich solvevd meine eigene Frage, der Code enthält etwas mehr Code über die Zuordnung, die ich mache, aber mit diesem Code unten. das Problem war, dass ich istringstream vor und wechselte es zu Stringstream istead, jetzt mit ctrl-z/ctrl-d funktioniert beenden. :

Firstclass myclass; 
string item, data; 
vector<string> split_input; 

// reads in on line of string until ctrl-z/ctrl-d 
while(getline(cin, data)){ 
    stringstream str_stream(data); 
    // reading the values separate adding them to vector 
    while(str_stream >> item{ 
     split_input.push_back(item); 
    } 
    // if amount is not given 
    if(v.size() == 2){ 
     myclass.insert_data(split_input[0], stod(split_input[1]), 1.00); 
    } 
    // if if amount is given 
    else{ 
     myclass.insert_data(split_input[0], stod(split_input[1]), stod(split_input[2])); 
    } 
    // clearing the vector 
    split_input.clear(); 
}