tutorials.de Buch-Aktion 05/2012
Like Tree4Danke
  • 1 Beitrag von vfl_freak
  • 1 Beitrag von derpfaff
  • 1 Beitrag von deepthroat
  • 1 Beitrag von vfl_freak
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
314
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ComTen ComTen ist offline Rookie
    Registriert seit
    Oct 2011
    Beiträge
    5
    Hey,
    ich habe vorhin angefangen ein wenig über C++ zu lernen.
    Folgendes Ratespiel habe ich bisher rausgebracht. (Nach dem Motto "Learning by doing" habe ich einfach mal losgelegt ;D)

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        int i;
        
    do
      {
    cout << "Rate eine Zahl zwischen 1 und 100" << endl;
    cin >> i;
      }
    while (i != 93);
     
    if (i = 93)
      {
          cout << "Du hast gewonnen !" << endl;
      }
      
    if (i > 100)
      {
          cout << "Du hast eine Zahl größer als 100 eingegeben -.-'" << endl;
      }
    }

    Zu meinen Fragen :

    1. Ich will bei einem Ratespiel natürlich nicht immer dieselbe Zahl benutzen. "93" habe ich jetzt einfach mal als Test benutzt. Es gibt sicherlich eine Möglichkeit Beim starten des Programmes eine neue Zahl zu generieren, oder ?

    2. Die zweite "if" Zeile klappt nicht so ganz, warum ?

    Ich hoffe, ich habe alle Forenregeln eingehalten.

    Mfg
    ComTen
     

  2. #2
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin und Willkommen hier bei tutorials.de

    Das ist doch ganz einfach :
    Deine while-Schleife läuft solange, bis die Zahl 93 eingegeben wird. Erst dann wird sie aufgrund der Abbruchbedingung verlassen!
    Also kann i anschließend IMMER nur den Wert 93 haben (und NIE 100) .....

    Gruß
    Klaus
    ComTen bedankt sich. 
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  3. #3
    Avatar von derpfaff
    derpfaff derpfaff ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Beiträge
    167
    Hallo,

    du kannst dir eine Zufallszahl generieren. Such' einfach mal nach der Funktion "rand()".

    Davon abgesehen hast du einen Fehler in der 1. if-Abfrage (sie wird in deinem Fall immer TRUE ergeben):
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    // falsch
    if (i = 93) ...
     
    // richtig
    if (i == 93) ...
     
    // besser
    if (93 == i) ...
    ComTen bedankt sich. 

  4. #4
    ComTen ComTen ist offline Rookie
    Registriert seit
    Oct 2011
    Beiträge
    5
    Ok erstmal danke euch beiden.
    Nachdem ich eure Posts gelesen habe, habe ich ein wenig geändert :

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        int Zufallszahl;
        int i;
        Zufallszahl = (rand()%100);
        
    do
      {
    cout << "Rate eine Zahl zwischen 1 und 100" << endl;
    cin >> i;
      }
      
    if (i == Zufallszahl)
      {
          cout << "Du hast gewonnen !" << endl;
      }
    }

    Wieder eine Frage :

    Anscheinend klappt das bisher ja.
    Doch ich will jetzt noch sowas einbauen wie z.B :

    Code cpp:
    1
    2
    3
    4
    
    if (i < Zufallszahl)
    {
       cout << "Zu klein" << endl;
    }

    Nach der while-Schleife kann ich dies ja anscheinend nicht tun.
    Doch in der while-Schleife klappt's ja auch nicht. Wo muss ich das also reinpacken ?
     

  5. #5
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Bei der do .. while Schleife fehlt das while.

    Du mußt es natürlich in die Schleife packen. Warum soll das nicht gehen?

    Damit du nicht immer dieselbe Zufallszahl bei jedem Programmstart bekommst, solltest du folgendes zu Beginn der main ausführen:
    Code cpp:
    1
    
    srand(time(NULL)); rand();
    Außerdem mußt du für die rand Funktion den Header cstdlib und für die time Funktion ctime "includen".

    Gruß
    ComTen bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  6. #6
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    TOO LATE ...

    Moin,

    mal davon abgesehen, dass in Deinem Code keine while-Schleife mehr vorkommt :

    Zitat Zitat von ComTen Beitrag anzeigen
    Nach der while-Schleife kann ich dies ja anscheinend nicht tun.
    Doch in der while-Schleife klappt's ja auch nicht
    Stimmt, nach der Schleife hättest Du ja den korrekten Wert - ab was genau klappt denn innerhalb der Schleife nicht
    Genau da müsste es ja hin !

    Gruß
    Klaus
    ComTen bedankt sich. 
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  7. #7
    ComTen ComTen ist offline Rookie
    Registriert seit
    Oct 2011
    Beiträge
    5
    Dank euerer Hilfe hab ich's jetzt hingekriegt

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
    #include <iostream>
    #include <cstdlib>
     
    using namespace std;
     
    int main()
    {
        srand(time(NULL)); rand();
        int Zufallszahl;
        int i;
        Zufallszahl = (rand()%100);
        
    do
      {
    cout << "Rate eine Zahl zwischen 1 und 100" << endl;
    cin >> i;
     
    if (i < Zufallszahl)
    {
          cout << "Zu klein" << endl;
    }
     
    if (i > Zufallszahl)
    {
          cout << "Zu gross" << endl;
    }
      }
    while (i != Zufallszahl);
     
    if (i == Zufallszahl)
      {
          cout << "Du hast gewonnen !" << endl;
          system ("PAUSE");
      }
    }

    Ist getestet und klappt. :>
    Bin ein bisschen stolz drauf. :P
     

  8. #8
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    na prima
    Ich würde es nur noch übersichtlicher formatieren - etwa so :
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    
    #include <iostream>
    #include <cstdlib>
     
    using namespace std;
     
    int main()
    {
        srand(time(NULL));
        rand();
        int Zufallszahl;
        int i;
        Zufallszahl = (rand()%100);
        
        do
        {
            cout << "Rate eine Zahl zwischen 1 und 100" << endl;
            cin >> i;
       
            if (i < Zufallszahl)
            { 
                 cout << "Zu klein" << endl;
            }
     
            if (i > Zufallszahl)
            {
                cout << "Zu gross" << endl;
            }
        } while (i != Zufallszahl);
     
        if (i == Zufallszahl)
        {
            cout << "Du hast gewonnen !" << endl;
            system ("PAUSE");
        }
    }

    Dur kannst den Thread auf "erledigt" setzen, in dem Du auf den Haken unten links unter dem letzten Beitrag klickt (neben "+ Auf Thema antworten") !

    Gruß
    Klaus
    Geändert von vfl_freak (05.10.11 um 16:47 Uhr)
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  9. #9
    ComTen ComTen ist offline Rookie
    Registriert seit
    Oct 2011
    Beiträge
    5
    @vfl_freak :
    Hab ich bereits getan.

    Hast du noch eine kleine Aufgabe, die in etwa meinem Leistungsstand entspricht. ?
     

  10. #10
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Schön, dass es funktioniert.

    Ein paar Anmerkungen noch:

    Du hast #include <ctime> vergessen.

    Du solltest deinen Code ordentlich einrücken. Verwende am besten einen Editor / IDE der das automatisch kann.

    Man könnte statt den zwei aufeinanderfolgenden if's auch "if ... else if" verwenden, da immer nur eine Bedingung gleichzeitig wahr sein kann. Man muss also nicht immer beides prüfen, sondern die zweite Bedingung nur, falls die erste falsch war. Insofern wäre das eine kleine Optimierung.

    Genauso nach der Schleife. Du wirst die Schleife nur verlassen wenn i == Zufallszahl ist. Das brauchst du also nicht nochmal prüfen.

    Verwende für C++ Code doch die [cpp]...[/cpp] Tags.

    Kannst ja mal spaßeshalber Strg+Z, Enter drücken.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  11. #11
    ComTen ComTen ist offline Rookie
    Registriert seit
    Oct 2011
    Beiträge
    5
    @deepthroat :

    Das ctime kapier ich nicht ganz...ohne klappt es auch und mit merke ich keinen Unterschied. (Zahlen sind bei jedem Start verschieden, mit oder ohne)

    Das mit if...if habe ich jetzt geändert und habe anstatt "if (i > Zufallszahl)" einfach "else" geschrieben.

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    
    if (i < Zufallszahl)
    {
          cout << "Zu klein" << endl;
    }
    else
    {
          cout << "Zu gross" << endl;
    }

    Aber das unterste if muss ja dableiben, sonst kommt ja keine Nachricht, dass man gewonnen hat, oder ?

    [cpp] hab ich jetzt auch hier verwendet. :P
    Und Strg + Z macht doch nur Sachen rückgängig ?
     

  12. #12
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von ComTen Beitrag anzeigen
    @deepthroat :

    Das ctime kapier ich nicht ganz...ohne klappt es auch und mit merke ich keinen Unterschied.
    Das ist allerdings nur Glück oder Zufall. Mit einem anderen Compiler funktioniert das dann evtl. nicht mehr.

    Die time Funktion ist nunmal in ctime deklariert und wenn man diese Funktion benutzen will, dann muss man die entsprechende Headerdatei auch einbinden. Das gehört zum guten Ton bzw. ist guter Stil.
    Zitat Zitat von ComTen Beitrag anzeigen
    Das mit if...if habe ich jetzt geändert und habe anstatt "if (i > Zufallszahl)" einfach "else" geschrieben.

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    
    if (i < Zufallszahl)
    {
          cout << "Zu klein" << endl;
    }
    else
    {
          cout << "Zu gross" << endl;
    }
    So ist es allerdings falsch. (Hast du das ausprobiert? ) Insgesamt gibt es nämlich 3 Möglichkeiten...
    Zitat Zitat von ComTen Beitrag anzeigen
    Aber das unterste if muss ja dableiben, sonst kommt ja keine Nachricht, dass man gewonnen hat, oder ?
    Warum probierst du das nicht einfach schnell aus?
    Zitat Zitat von ComTen Beitrag anzeigen
    Und Strg + Z macht doch nur Sachen rückgängig ?
    In Word vielleicht. Warum probierst du's nicht einfach aus?

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 11.09.10, 12:01
  2. Ratespiel
    Von kautschuk im Forum Bildbearbeitung & Illustration
    Antworten: 8
    Letzter Beitrag: 12.06.07, 16:53
  3. Antworten: 6
    Letzter Beitrag: 14.09.06, 00:20
  4. Antworten: 0
    Letzter Beitrag: 13.09.06, 20:21
  5. Ratespiel mit Rangliste
    Von BIAsTeR im Forum Java
    Antworten: 1
    Letzter Beitrag: 03.01.06, 09:33

Stichworte