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'
-
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.