2012-04-13 3 views
4

Warum endet die äußere Schleife im folgenden Programm, wenn wir nur ctrl + z für die innere Schleife bereitstellen?Fortsetzen des Lesens von iostream :: cin nach Strg + Z (EOF)? ("Ignorieren" funktioniert nicht)

#include<iostream> 
int main() 
{ 
    string s1,s2; 

    while(cin >> s1) 
    { 
     cout<<"In loop1\n"; 
     while(cin>>s2) 
      cout<<"In loop 2\n"; 
     cin.ignore(); 
    } 
} 
+0

Ich habe die primäre Frage geändert. Ich hoffe, es ist immer noch in Einklang mit deinen Zielen (die Schleifen waren ein sekundärer Effekt). –

Antwort

7

Mit Strg + z (unter Windows) wird der Standard-Eingabestream geschlossen. Sobald es geschlossen ist, bleibt es geschlossen. Es wird nicht magisch wieder geöffnet, sobald die innere Schleife beendet ist. Es gibt einfach keinen Grund, warum es so wäre.

+0

Er weiß wahrscheinlich, dass 'cin.ignore();' den EOF-Zustand löscht und sich fragt, warum er danach nicht mehr lesen kann. –

+2

Welchen Input können wir nur zum Beenden der inneren Schleife bereitstellen? – user1232138

+1

Verstanden. Ich brauche cin.clear() .. – user1232138

3

Ctrl-Z setzt cin in einen Fehlerzustand, so dass cin.ignore es nicht tut. versuchen Sie stattdessen cin.Clear().