2016-04-03 9 views
0

Ich versuche, in 2 Stapeln einzufügen, aber aus irgendeinem Grund, wenn ich das Programm ausführen, wird die erste Schleife ausgeführt und überspringt dann die zweite Schleife.Wie Schleife zweimal, um verschiedene Werte in 2 verschiedene Stapel einzufügen

do 
{ 
    cout<<"enter data: "; 
    cin>>data; 
    cout<<data<<endl; 
    if (cin.fail()){ 
     cin.clear(); 
     break; 
    } 
    else{ 
     stack1.push(data); 
    } 
}while(cin.good()); 
//stack 2 
do 
{ 
    cout<<"enter data: "; 
    cin>>data; 
    cout<<data<<endl; 
    if (cin.fail()){ 
     cin.clear(); 
     break; 
    } 
    else{ 
     stack2.push(data); 
    } 
}while(cin.good()); 
+0

Wenn 'cin.good()' falsch wird, startet es nie die zweite Schleife. Sie können nach einer bestimmten Eingabe suchen und zur zweiten Schleife gehen, wenn Sie dies lesen –

+0

Am Ende der ersten Schleife ist cin.good() false. Versuchen Sie vielleicht, cin.good() false vor der zweiten Schleife erneut zu machen. –

+1

Warum würde es nie in die zweite Schleife kommen ?, es ist ein Do-While, es macht immer die erste Schleife. –

Antwort

1

Weil Sie nie break der ersten Schleife aus, wenn Sie gültige Daten haben, möchten Sie wahrscheinlich etwas mehr wie:

do 
{ 
    cout<<"enter data: "; 
    cin>>data; 
    cout<<data<<endl; 
    if (cin.fail()){ 
     cin.clear(); 
    } 
    else{ 
     stack1.push(data); 
     break; 
    } 
}while(cin.good()); 
+0

Das würde mir erlauben, nur einen Gegenstand in den Stapel zu legen. –

+0

Ah, OK. Finden Sie den Code ein wenig verwirrend :(Sie wollen also weiter Einträge eingeben, bis die Eingabe fehlschlägt. Sollten Sie 'cin' nicht korrigieren, wenn die' while' Bedingung fehlschlägt? Und vielleicht 'flush'' cout' in der Eingabeaufforderung ? –

0

Versuchen sowohl die Push-Codes in der gleichen Schleife selbst

do 
{ 
cout<<"enter data: "; 
cin>>data; 
cout<<data<<endl; 
if (cin.fail()){ 
cin.clear(); 
break; 
} 
else{ 
stack1.push(data); 
stack2.push(data); 
} 
}while(cin.good());