Warum wird die Eingabe übersprungen?
-
Hallo,
also mein problem ist in diesem code das die Eingabe vor der schleife übersprungen wird und die Schleif ausgeführt wird obwohl sie das nicht sollte.
#include<iostream> #include<vector> using namespace std; int main() { vector<int> liste; int zahl; int zahl2; cout<<"Geben sie eine Zahl ein"<<endl; do { cin>>zahl; if(!cin) { break; } else { liste.push_back(zahl); } }while(1); cout<<"Geben sie ein zweite Zahl ein"<<endl; cin>>zahl2; for( size_t i=0;i<liste.size();++i) { if(zahl2==liste[i]) { cout<<"Zahl gefunden"<<endl; break; } else { cout<<"Zahl nicht gefunden"<<endl; break; } } return 0; }wäre gut wenn ihr mir helfen könntet.
DEr code soll einfach nur nach einer eingegeben zahl in der liste suchen
-
Du musst wohl cin erst leeren.
Ich hab mir das mal spasseshalber angesehen und festgestellt, dass ich im cin ohne Eingabe einen halben Win-Zeilenumbruch hatte ...
-
hmm mit fällt spontan nichts ein...
aber den eingabepuffer leerst du so:
cin.ignore( cin.rdbuf()->in_avail() );
-
aber normaler weißte wird doch ne eingabe auch nicht übersprungen,also wenn ich ganz normal ne eingabe mache muss ich doch den puffer vorher auch net leeren,. das ist sehr komisch
-
Firefighter schrieb:
also wenn ich ganz normal ne eingabe mache muss ich doch den puffer vorher auch net leeren
Doch, eigentlich schon; die meisten sind nur so schlampig und tun es nicht.
-
Viel wichtiger als das Puffer-leeren ist es übrigens, den Status des Streams auf OK zurückzusetzen. Nachdem du die erste Schleife mit
if(!cin)break;verlassen hast, ist immer noch zumindest das failbit gesetzt - und in diesem Zustand ist cin nicht bereit, etwas einzulesen.PS: Die Schleife geht auch wesentlich kürzer

while(cin>>zahl) liste.push_back(zahl);