Eingabebestätigung



  • Hallo erstmal
    Ich habe folgendes Problem: Ich bin in einer Informatikschule im 1. Jahr und unser C++ Lehrer hatte die geniale Idee, dass jeder ein eigenes Spiel programmieren muss. Ich habe mich für Mastermind entschieden und bin jetzt aktisch fertig doch ich habe noch ein problem. Nämlich dieses, dass ich nicht mehr weiss, wie ich überprüfen kann, was der user eingibt. Ich gebe mal ein Beispiel, be dem ich es probiert habe, jedoch immer ein Fehler erscheint:

    do
    {
    cout << "Geben Sie jetz noch ein, wieviele Runden Sie maximal brauchen duerfen." << endl;
    cin >> schwr;

    if (schwr < 0 && schwr > 100000)
    {
    ok=true;
    }

    else
    {
    ok=false;
    cout<< "Bitte Geben Sie beim Schwierigkeitsgrad eine Zahl zwischen 1 und 100000 ein!" << endl;

    }
    }
    while(!ok);

    tatsächlich habe ich dies aus einer Musterlösung abgeschrieben, doch bei mir funktioniert es nicht. Ich habe bool auf ok gesetzt und cin auf int, aber trotzdem kommt immer wieder in logischer Fehler, hat jemand ne Idee?



  • Hallo,

    if (schwr < 0 && schwr > 100000)
    

    Diese Bedingung ist nie true, da schwr nicht kleiner als 0 UND größer als 100000 sein kann. (Nimm statt && ||)

    2. Was willst du genau: Ist die Eingabe < 0 oder die Eingabe größer als > 100000 korrekt? Ich denke nämlich mal, dass du es direkt vertauscht hast, sprich, dass wenn die Eingabe < 0 || die Eingabe > 100000 nochmal gefragt werden soll, wieviele Runden gespielt werden sollen.

    Ich glaube, dass du es eher so haben wolltest (von der Logik her ;))

    bool ok = false;
    int schwr;
    do
    {
         cout << "Geben Sie jetz noch ein, wieviele Runden Sie maximal brauchen  duerfen." << endl;
         cin >> schwr;
    
         if (schwr < 0 || schwr > 100000)
         {
               cout<< "Bitte Geben Sie beim Schwierigkeitsgrad eine Zahl zwischen 1 und 100000 ein!" << endl;
         }
    
         else
         {
               ok = true;
         }
    }
    while(!ok);
    

    Caipi



  • hm danke, das mit den Grösserzeichen war sehr dumm. Das ander problem ist, dass wenn ich eine falsche Eingabe mache, also Buchstaben, riesige Zahlen etc., der Satz unendlich oft kommt, das weiss ich leider nicht zu unterbinden



  • Probier mal anstatt ein int ein string einzulesen. Und wandel den String dann mit atoi in eine Zahl um...

    bool ok = false;
    char schwr[20];
    int i, jn;
    do
    {
         cout << "Geben Sie jetz noch ein, wieviele Runden Sie maximal brauchen  duerfen." << endl;
         cin >> schwr;
    
         jn = 1;
    
         for(i = 0; i < strlen(schwr); i++)
            {
            if (!isdigit(schwr[i])) jn = 0;
            }
    
         if (jn == 1) {
         if (atoi(schwr) < 0 || atoi(schwr) > 100000)
         {
               cout<< "Bitte Geben Sie beim Schwierigkeitsgrad eine Zahl zwischen 1 und 100000 ein!" << endl;
         }
    
         else
         {
               ok = true;
         }
         }
         else cout<< "Keine Zahl!" << endl;
    
    }
    while(!ok);
    

    Hab das Beispiel nicht überprüft....



  • Tatächlich sind wir in unserem C++ Kurs noch nicht so weit, aber es wäre natürlich lustig den Lehrer zu überraschen 😮
    Leider gibts bei mir paar Fehler:

    c:\dokume1\mller1\desktop\spiel\testtest.cpp: In function int main(int, char **)': c:\\dokume~1\\mller~1\\desktop\\spiel\\testtest.cpp:91: passing \int' to argument 1 of `strlen(const char *)' lacks a cast
    c:\dokume1\mller1\desktop\spiel\testtest.cpp:93: invalid types int[int]' for array subscript c:\\dokume~1\\mller~1\\desktop\\spiel\\testtest.cpp:98: passing \int' to argument 1 of `atoi(const char *)' lacks a cast
    c:\dokume1\mller1\desktop\spiel\testtest.cpp:98: passing `int' to argument 1 of `atoi(const char *)' lacks a cast



  • Kannst es auch so machen (ist eben kürzer, mehr aber auch nicht...)

    int schwr;
    
        // Endlosschleife
        while(1)
        {
            // Eingabe
            cout << "Bitte Zahl eingeben: ";
            cin >> schwr;
            // Überprüfung
            if(schwr > 0 && schwr <= 100000)
            {
               // Wenn Zahl OK: Schleife abbrechen
               break;
            }
            // Ansonsten Fehler
            cout << "Bitte nur Zahlen zwischen 1 und 100000 eingeben." << endl;
        }
    

    PS: Code am besten in C++-Tags, dann wird er automatisch formatiert. (unter den Smilys)



  • wow das mit dem break ist gut, thx, was ich net verstehe ist, wieso es
    , falls die Bedingung falsch ist, die beiden Sätze endlos wiederholt. Es soltle doch beim cin wieder halt machen, tut es aber irgendwie net 😕



  • ach noch ne letzte Frage, Leute, dann hör ich auf euch auf die Nerven zu gehen. Ich möchte dem Benutzer sagen, wieviele Runden er noch Zeit hat, darum hab ich eigetnlich folgendes gemacht:
    int schwr:

    cout << "Geben Sie jetz noch ein, wieviele Runden Sie maximal brauchen duerfen." << endl;
                  cin >> schwr;
    

    dann hab icheigetnlich am schluss, nach seinen 4 Zahlen einfach

    schwr-1;
                     cout <<"Sie haben noch " << schwr  << " Runden um zu gewinnen" << endl;
    

    gemacht, aber dann kommt immer die selbe Zahl, was muss ich denn tun das es immer ein -1 zählt?



  • Such dir eins aus:

    schwr = schwr - 1;
    schwr -= 1;
    --schwr;
    schwr--;
    


  • thx a lot, noch ne letzte Frage, dann hör ich auf euch zu nerven ^^
    bei mir gibtsn och ein Fehler, den ich einfach net finde, vielleicht sieht ihn eienr von euch profis: Es ist ein logikfehler von dem her:

    do
        {
        cout << "Geben Sie bitte 4 Zahlen zwischen 1 und 9 ein" << endl;
    
        cin >> zahleins;
    
        cin >> zahlzwei;
    
        cin >> zahldrei;
    
        cin >> zahlvier;
    
        //1. Zahl wird gecheckt
        if(zahleins == int_random1)
        {
                cout << "1. Zahl richtig und am richtigen Platz" << endl;
        }
        if(zahleins == int_random2)
        {
                cout << "1.Zahl richtig aber am falschen Platz" << endl;
        }
        if(zahleins == int_random3)
        {
                cout << "1.Zahl richtig aber am falschen Platz" << endl;
        }
        if(zahleins == int_random4)
        {
                cout << "1.Zahl richtig aber am falschen Platz" << endl;
        }
        else
        {
                cout <<"Leider kommt die 1.Zahl nicht vor" << endl;
        }
    
            //2. Zahl wird gecheckt
        if(zahlzwei == int_random1)
        {
                cout << "2.Zahl richtig aber am falschen Platz" << endl;
        }
        if(zahlzwei == int_random2)
        {
                cout << "2.Zahl richtig und am richtigen Platz" << endl;
        }
        if(zahlzwei == int_random3)
        {
                cout << "2.Zahl richtig aber am falschen Platz" << endl;
        }
        if(zahlzwei == int_random4)
        {
                cout << "2.Zahl richtig aber am falschen Platz" << endl;
        }
        else
        {
                cout <<"Leider kommt die 2.Zahl nicht vor" << endl;
        }
    
            //3. Zahl wird gecheckt
        if(zahldrei == int_random1)
        {
                cout << "Die 3. Zahl ist richtig aber am falschen Platz" << endl;
        }
        if(zahldrei == int_random2)
        {
                cout << "DIe 3.Zahl ist richtig aber am falschen Platz" << endl;
        }
        if(zahldrei == int_random3)
        {
                cout << "Die 3.Zahl ist richtig und am richtigen Platz" << endl;
        }
        if(zahldrei == int_random4)
        {
                cout << "Die 3.Zahl ist richtig aber am falschen Platz" << endl;
        }
        else
        {
                cout <<"Leider kommt die 3.Zahl nicht vor" << endl;
        }
    
            //14 Zahl wird gecheckt
        if(zahlvier == int_random1)
        {
                cout << "Die 4. Zahl ist richtig aber am falschen Platz" << endl;
        }
        if(zahlvier == int_random2)
        {
                cout << "Die 4.Zahl ist richtig aber am falschen Platz" << endl;
        }
        if(zahlvier == int_random3)
        {
                cout << "Die 4.Zahl ist richtig aber am falschen Platz" << endl;
        }
        if(zahlvier == int_random4)
        {
                cout << "Die 4.Zahl ist richtig und am richtigen Platz" << endl;
        }
        else
        {
                cout <<"Leider kommt die 4.Zahl nicht vor" << endl;
        }
        if(zahleins == int_random1 && zahlzwei == int_random2 && zahldrei == int_random3 && zahlvier == int_random4)
        {
                cout <<"Gratulation, " <<name<<", Sie haben den Code geknackt, wollen Sie eine Pause?\nDrücken Sie J/j falls Sie das Spiel beenden wollen oder N/n, falls Sie nochmal spielen wollen." << endl;
    
        }
        else
        {
    
                if(schwr==0)
                {
                     cout <<"Schade schade," << name << ",Sie haben leider das Spiel verloren." << endl;
    
                }
                else
                {
                     schwr = schwr-1;
                     cout <<"-->Sie haben noch " << schwr  << " Runden um zu gewinnen<--" << endl;
                }
         }
         }
        while(schwr=!0);
    

Anmelden zum Antworten