Zufallsgenerator



  • Hallo,

    ich möchte mit einem Zufallsgenerator einen 3-armigen-Bandit erstellen, doch leider liefert das erste Fenster immer nur aufsteigende Zahlen, also 0...1...2... usw. Dies ist ja nicht gerade zufällig!

    Weiss einer, was ich falsch mache? Hier der Code:

    int zufall;
    char str[5];
    srand(clock());
    for(int i=0; i<3;i++)
    {
    zufall = (int) (rand()*7)/RAND_MAX;
    sprintf(str, "%d", zufall);
    m_Feld[i].SetWindowText(str);
    }



  • > int zufall;
    > char str[5];

    Definiere Deine Variablen erst, wenn Du sie wirklich benötigst. Selbst in C (C99) darf man das inzwischen machen.

    > zufall = (int) (rand()*7)/RAND_MAX;

    Hier kann es zu einem Überlauf kommen.

    > sprintf(str, "%d", zufall);

    Was programmierst Du? C oder C++?

    > m_Feld[i].SetWindowText(str);

    was ist m_Feld ?

    Schmeiß Deine Lehrbücher weg und schnapp dir ein richtiges C++ Buch.

    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    
    using namespace std;
    
    int main()
    {
      srand(clock());
      for (int i=0; i<3; ++i) {
        int t = rand() % 7;
        cout << t << '\n';
      }
      return 0;
    }
    


  • und nimm statt:
    srand(clock());
    lieber:
    srand(time(0));



  • Das Problem bleibt bestehen.
    Ich programmiere C++ mit MFC. m_Feld[] ist ein Array aus CEdit-Textfeldern.
    Wenn ich zur Initialisierung srand(clock()) verwende, sind im ersten Feld aufsteigende Zahlen, wenn ich srand(time(0)) verwende, bleibt der Inhalt des ersten Textfeldes sogar unverändert auf dem Startwert '0'


  • Mod

    Deine Umrechnung auf den Wertebereich 0-6 ist nicht richtig, da passieren Überläufe und Integerdivisionen die du nicht bedacht hast. Mach es so wie ladidalo.


Log in to reply