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);
    

Anmelden zum Antworten