So ein Zufall aber auch



  • Hallo,

    Ich soll ein Programm schreiben, wo der Benutzer eine zufällige Zahl zwischen 0 und 10 erraten soll. Er soll einen Tipp bekommen ob die Zahl größer oder kleiner ist und nach weiteren Versuch gefragt werden. Ich bin soweit gekommen, aber weiß nicht recht wie ich die erste rand()zahl fixieren soll um den Tipp und weiteren Versuch sinnvoll zu implementieren.

    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    
    using namespace std;
    
    int main(){
    
      srand((unsigned)time(NULL));
    
        int eingabe;
        bool neuer_versuch;
        cout << " ... \n"
             << "Errate eine Zahl zwischen 0 und 10\n";
    
      do{
        cout << "Deine Wahl:  ";
        cin >> eingabe;
    
    
        cout << rand() % 10 << endl;
    
        cout << "Noch ein Versuch(j/n)?";
        char wahl;
        cin >> wahl;
        neuer_versuch = ('J' == wahl || 'j' == wahl);
    
        if(neuer_versuch)
            continue;
    
        cout << "game over";
    
    
      }while(true);
    
    
      return 0;
    
    }
    

    Hat wer ein paar Worte?

    Danke
    Lou



  • Hi,
    also rand() steht seit 7 Jahren im Museum. Heute generierst du eine Zufallszahl so:

    #include <random>
    random_device rd{};
    mt19937 mt{ rd() };
    uniform_int_distribution<> dist{ 0, 10 };
    auto zufallszahl = dist( mt );
    cout << zufallszahl << endl;
    


  • @Lou-Cyphr3

    fixieren sol

    Weise den Wert einer Variablen zu.



  • @Lou-Cyphr3 Werte, die man sich merken muss, speichert man in einer Variablen.



  • @out okay. Weißt d warum das so ist?

    @DirkB @manni66

    Danke für schupsen vom Schlauch. Komplett logisch.
    habs jetzt hinbekommen



  • @Lou-Cyphr3 sagte in So ein Zufall aber auch:

    @out okay. Weißt d warum das so ist?

    Alles entwickelt sich weiter. Irgendwann sind die Dinge veraltet und dann kommt der Tesla.

    Es gibt C++98/03, es gibt C++11, es gibt C++14, es gibt C++17. Und bald sind wir bei C++20. Wunder dich nicht, dass dein Dozent bei C++98/03 hängen geblieben ist. 90% der Dozenten bleiben da hängen. Leider musst du das alte Zeug halt für die Klausuren wissen, danach kannst du es wieder vergessen und es richtig lernen.



  • @out Die Verteilung der „Zufallszahlen“ von rand() genügt nicht statistischen Anforderungen.

    Bei deinem Beispiel mit % 10 treten einige Zahlen häufiger auf. Das liegt daran, dass der Maximalwert von rand() nicht ganzzahlig durch 10 teilbar ist.

    Für deinen Zweck reicht rand() aber dicke aus.



  • @out 🙂 super.

    Ich hab hier noch ein kleines Problemchen mit der Ausnahme für alles außer Zahlen.
    Wie geht das nochmal?

    #include <iostream>
    #include <ctime>
    #include <cstdlib>
    
    using namespace std;
    
    int main(){
    
      srand((unsigned)time(NULL));
    
        int eingabe;
        bool neuer_versuch;
        int zufall = rand() % 10;
        cout << " ... \n"
             << "Errate eine Zahl zwischen 0 und 10\n";
    
      do{
        cout << "Deine Wahl:  ";
        cin >> eingabe;
    
        if (eingabe < 0)
            cout << "Fehler : Eingabe kleiner 0\n";
    
        else if (eingabe >= 11)
            cout << "Fehler : Eingabe größer 10\n";
    
        else{
    
    
        if(zufall > eingabe)
          cout << "Mhh. Fast. Versuchs mit einer größeren Zahl\n"
               << "Noch ein Versuch(j/n)?";
    
        else if (zufall < eingabe)
          cout << "Mhh. Fast. Versuchs mit einer kleineren Zahl\n"
               << "Noch ein Versuch(j/n)?";
    
        else if (zufall == eingabe)
                cout << "richtig" << endl;
    
        else
          cout << "Das war eine inkorekte Eingabe" << endl;
    
    
    
        char wahl;
        cin >> wahl;
        neuer_versuch = ('J' == wahl || 'j' == wahl);
    
        if(neuer_versuch)
            continue;
    
        cout << "game over";
            break;
    
            }
        }while(true);
    
    
      return 0;
    
    }
    


  • if( !cin )
    {
       cin.clear();
       cin.ignore();
    }
    

Anmelden zum Antworten