Zufallszahl erraten --> Gelöst



  • Hey, ich hab die aufgabe ein programm zu schreiben, dass Zufallszahlen generiert und diese vom Benutzer errraten lässt
    Das problem ist, das mein programm immer angibt, dass die eingegebene Zahl zu groß ist...

    # include <stdlib.h>
    # include <stdio.h>
    # include <time.h>
    
    int main()
    {
        int iSecret;
        int Zahl;
    
        printf( "Erraten Sie die Zahl die der Computer sich ausgedacht hat\n");
    
                srand ( time(NULL) );
                iSecret = rand() % 10 + 1;
    
                for(; ; )
                {
                    fflush( stdin);
                    scanf( "d%", &Zahl);
    
                         if( Zahl != iSecret)
                         {
                              if( Zahl < iSecret)
                              {
                                  printf( "Diese Zahl war leider zu klein...\n");
                                  continue;
                              }
    
                              else( Zahl > iSecret);
                              {
                                    printf( "Diese Zahl war leider zu gross...\n");
                                    continue;
                              }
                         }
    
                         else( Zahl == iSecret);
                         {
                             printf( "Richtig geraten!!!\n");
                             break;
                         }
                }
    
                 system("pause");
    }
    

    wenn jemand ne idee hat worans liegen könnt, sagts bitte bescheid... 😉
    lg Flo



  • in zeile 37 musst du "else if(Zahl==iSecret)" schreiben



  • In Zeile 20 muss es scanf ("%d", &Zahl); heißen.

    Zu Zeile 14:
    Bei Zufallszahlen die Modulo-Funktion zu benutzen ist nicht gut, da die "Zufälligkeit" dadurch beeinträchtigt wird. Siehe Zufallsgenerator

    Zu Zeile 19:
    fflush (stdin); führt zu undefiniertem Verhalten. Siehe fflush (stdin)



  • player4245 schrieb:

    in zeile 37 musst du "else if(Zahl==iSecret)" schreiben

    ok, habs geändert
    gibt leider immer noch "diese zahl war leider zu gorß" aus



  • ZockerFloh7 schrieb:

    player4245 schrieb:

    in zeile 37 musst du "else if(Zahl==iSecret)" schreiben

    ok, habs geändert
    gibt leider immer noch "diese zahl war leider zu gorß" aus

    In Zeile 37 reicht ein einfaches else :

    ...
                         else
                         {
                             printf( "Richtig geraten!!!\n");
                             break;
                         }
    ...
    

    Dasselbe gilt für Zeile 30.



  • im scanf ist % und d vertauscht, und dann ist die abfragelogik mist. machs etwa so:

    ...
    if( Zahl < iSecret)
       printf( "Diese Zahl war leider zu klein...\n");
    else if( Zahl > iSecret)
       printf( "Diese Zahl war leider zu gross...\n");
    else
    {
       printf( "Richtig geraten!!!\n");
       break;
    }
    ...
    

    ^^wenn nicht kleiner dann vielleicht grösser. wenn beides nicht, dann: treffer.
    🙂



  • deine abfrage sieht mal total abenteuerlich und auch fehlerhaft aus: hinter else steht weder eine bedingung noch ein semikolon.
    Außerdem: es gibt ja nur drei möglichkeiten, daher kannst du dir die verschachtelung sparen.

    if(...) // zu klein
    else if(...) // zu groß
    else // passt!
    


  • erikkk schrieb:

    deine abfrage sieht mal total abenteuerlich und auch fehlerhaft aus: hinter else steht weder eine bedingung noch ein semikolon.
    Außerdem: es gibt ja nur drei möglichkeiten, daher kannst du dir die verschachtelung sparen.

    if(...) // zu klein
    else if(...) // zu groß
    else // passt!
    

    sorry, bin totaler anfänger
    habs am anfang au nich verschachtelt gehabt, aber da hats nich funktioniert, dann hab ich mir gedacht probier ichs mal anders...
    muss man hinter else ein semikolon machen?



  • Basher schrieb:

    im scanf ist % und d vertauscht, und dann ist die abfragelogik mist. machs etwa so:

    ...
    if( Zahl < iSecret)
       printf( "Diese Zahl war leider zu klein...\n");
    else if( Zahl > iSecret)
       printf( "Diese Zahl war leider zu gross...\n");
    else
    {
       printf( "Richtig geraten!!!\n");
       break;
    }
    ...
    

    ^^wenn nicht kleiner dann vielleicht grösser. wenn beides nicht, dann: treffer.
    🙂

    oh, lol
    hab mir schon gedacht dass des mit dem scanfe irgendwie komisch aussieht 😃
    hab die abfragelogik vorher so gehabt, habs dann bloß umgebaut, weils nich gegangen ist...
    danke für die hilfe 🙂



  • ZockerFloh7 schrieb:

    muss man hinter else ein semikolon machen?

    Nein.



  • ZockerFloh7 schrieb:

    muss man hinter else ein semikolon machen?

    Nein.



  • Jut, dann danke an alle
    ging wirklich sehr schnell (nich mal 10 minuten) xD



  • ZockerFloh7 schrieb:

    muss man hinter else ein semikolon machen?

    nee, machste hinter if ja auch nicht

    if (a < b);
      mach_was();
    

    ^^ falsch: if macht nix, mach was kommt immer dran

    if (a < b)
      mach_was();
    

    ^^ richtig: mach_was() ist bestandteil der if-anweisung

    if (a < b)
      mach_was();
      mach_nochwas();
    

    ^^ falsch: beim ; ist die anweisung zuende

    if (a < b)
    {
      mach_was();
      mach_nochwas();
    } // <-- kein semikolon
    

    ^^ richtig: if bezieht sich auf das ganze {...}
    🙂


Anmelden zum Antworten