Unerklärliche "Verhaltensstörung"



  • Hallo!

    Ich habe nicht direkt ein Problem, aber die Sache ließ mich ordentlich stutzen:

    http://www.zerowaitingtime.com/19055-download-1x1_Rechner.exe

    Ein kleiner 1x1 Rechner, der die verschiedenen Reihen aufsagen kann. Die Eingabe ist gegen negative Zahlen und Zahlen > 10 gesichert. Allerdings nimmt das Programm auch chars an, obwohl ich die Variable "Reihe" als int definiert habe. Wenn man einen character als Wert eingiebt, spuckt er die 2er Reihe aus (keine Ahnung warum gerade die) und beantwortet die Frage, ob man noch eine Reihe sehen möchte, von alleine und beendet sich. Aber seht am besten selbst.

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        int Reihe;
        char Nochmal;
        int Again;
    
    do
    {
        cout << endl;
        cout << "Welche Reihe des kleinen 1x1 moechten Sie sehen? " << endl << endl;
        cin >> Reihe;
    
        cout << endl;
    
        if (Reihe >= 10)
        {
                  cerr << "Nur Reihen des KLEINEN 1x1!" << endl;
                  system("PAUSE");	
                  return 1;
        }
        else if (Reihe < 0)
        {
                  cerr << "Keine negativen Zahlen!" << endl;
                  system("PAUSE");
                  return 1;
        }
    
        cout << "Die " << Reihe << "er " << "Reihe ist: " << endl << endl;
    
        for (int i = 0; i < 11; i++)
        {
            cout << i*Reihe << endl;
        }
    
       cout << endl;   
       cout << "Moechten Sie noch eine Reihe sehen? j/n. " << endl << endl;
       cin >> Nochmal;
    
       if ( Nochmal == 'j' ) Again = 1;
    
       else if ( Nochmal == 'n' )
            Again = 0;
    
       else
       {
           cout << endl;
           cerr << "Falsche Eingabe, Programm wird beendet . . . " << endl;
           cout << endl;
           system("PAUSE");	
           return 1;
    
       }
    }
    while (Again == 1);            
    system("PAUSE");	   
    return 0;
    }
    


  • Tja ein Glück, dass dein PC nicht explodiert ist, das Verhalten ist nämlich nicht definiert, da du deinen Variablen keinen Wert zuweist - und selbst dann bin ich mir nicht sicher ob der operator>> trotzdem einen Wert zuweisen darf.
    Einfach mit einfach mit .fail()/.bad() schauen obs geklappt hat.







  • Das wundert mich jetzt, in meinem Skript "Eine Einführung in C++" von Karsten Urban hat der nie etwas derartiges getan.



  • chris2k6 schrieb:

    Das wundert mich jetzt, in meinem Skript "Eine Einführung in C++" von Karsten Urban hat der nie etwas derartiges getan.

    In der Lernphase wollte er es wahrscheinlich nicht unnötig kompliziert machen und hat auf Fehlerüberprüfungen verzichtet.

    MfG SideWinder



  • boah super gut danke für die links!!! Dieser Code hat mir noch gefehlt! yeaha damit kann ich endlich in meinem Zahlenraten programm fehlerhafte eingaben abfangen und das von dir oben beschriebene Problem lösen!!! DANKE

    if(cin.fail())
    {
        cin.clear();
        cin.ignore();
    }
    

    hab mir das bischen zurecht gemurkst und diese lösung klappt super

    while (cin.fail())
            {
    
                    cin.clear();
                    cin.ignore();
                    cout << endl << "Falsche eingabe" << endl;
                    cout << "Dein Tipp: ";
                    cin >> GerateneZahl;
    
            }
    

Log in to reply