Schleifenproblem oder warum der Fehler



  • also ich habe ein programm was eigentlich mit der taste "e" beendet werden soll jedoch führt er dann die shcleife ohne ende aus,kann mir einer sagen warum .Erstma davon abgesehen wie mistig der code ist, das steht hier nich zur debatte, udn auch weil system() verwendet habe, mir gehst erstma um das problem weil ich es net so ganz nachvollziehen kann.

    #include<iostream>
    #include<vector>
    #include<cstddef>
    #include<string>
    #include<conio.h>
    
    using namespace std;
    
    int main()
    {
       vector<float> deinedaten;
    
       float daten;
    
       char taste;
    
       taste=getch();
    
       do {
    
            cout<<"Geben sie einen Wert ein (e = Ende der Eingabe)"<<endl;
    
            cin>> daten;
            if(taste!='e')
            {
            deinedaten.push_back(daten);
            }
    
            } while(taste!='e');
    
            cout<<"Es wurde folgendes eingegeben"<<endl;
    
            for(size_t  i =0;i<deinedaten.size();++i)
            {
            cout<<i<<" . Wert "<<deinedaten[i]<<endl;
            }
            float summe=0.0;
    
            for(size_t i=0;i<deinedaten.size();++i)
            {
                summe+=deinedaten[i];
            }
            cout<<"Der Mittelwert des  Vectors ist "<<summe/deinedaten.size()<<endl;
    
    system("Pause");
    }
    

    kann mir einer helfen?



  • Ich kann mich ja irren, aber die Eingabe des Wertes der Variable "Taste" wird von dir doch gar nicht gefordert...



  • do {
            cout<<"e zum beenden, fuer weitere werte beliebige taste druecken"<<endl;
    		taste=getch();       
            cin>> daten;
    

    sooo....
    warum es nicht ging ? ganz einfach da du getch außerhalb der schleife hattest war es für die schleife nicht relevant für den verlauf



  • super ihr seit meine helden danke es geht.



  • ok alles klar jetzt funktioniert es , aber ich will es ja so das ich nich immer eine taste doppelt drücken muss, weil wenn ich das getch( ) in die do schleife reinmache,muss ich immer wenn ich eine zal eingebe doppelt drücken, weil der ja immer wieder das getch( ) abfragt, ich wollte das er es einmal abfragt, aber wie... also ohne das ich immer doppelt die tasten drücken muss.

    danke im voraus



  • Du kannst das getch() auch ganz weglassen und zum Schleifenabbrich den Stream-Status verwenden (wenn die nächste Eingabe nicht als Zahl interpretiert werden kann - z.B. dein 'e' - setzt der Stream das failbit und das kann mit !cin oder cin.fail() abgefragt werden).



  • und wie meinste das mit dem Stream-Status, also kannste das ma an einem beispiel erklären??



  • Für ausführlichere Erklärungen verweise ich mal auf meinen Magazin-Artikel, ein Beispiel kannst du sofort haben:

    int i;
    cout<<"Bitte eine Zahl eingeben:";
    cin>>i;
    if(!cin)//Abfrage des Status
    {
      cout<<"Ist das eine Zahl?";
      cin.clear();cin.ignore();//cin rücksetzen auf "in Ordnung"
    }
    else
    {
      cout<<"Danke, daß Sie die "<<i<<" eingegeben haben."
    }
    

Anmelden zum Antworten