Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Immer 2 gleiche Zufallszahlen trotz "srand(time( NULL ))"

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
11.04.2006, 14:23 Uhr
~NixNutz
Gast


Hi,
ich programmiere gerade ein Konsolenprogramm das mit dem Benutzer "BlackJack" spielt. Gewinnt der Benutzer verätt ihm das Programm ein "(für neulinge)Geheimis" zb. wie man Windows XP Home zu einer (Light)Pro macht, verliert jedoch der Benutzer wird je nach Brisanz des "Geheimnises" nur die Auflösung als Strafe verringerd oder sogar eine Systemdatei gelöscht.

Nun zu meiner Frage,
jeder muss 2 mal hintereinander Würfeln jedoch kommen stets 2 gleiche Zahlen bei jedem Würfeldurchgang raus. Der Code sie etwa so aus(bin auf Arbeit und habe den Orginalcode gerade nicht zurhand):


C++:

srand(time( NULL ))
würfelzahl1 = rand() % 6 +1;

srand(time( NULL ))
würfelzahl2= rand() % 6 +1;




Ich vermute das diese 2 Werte in der gleichen Sekunde ermittelt werden und srand() somit stehts den gleichen "Startwert" an rand() übergibt.
Kann man srand so einstellen das es bei 2ten Mal einen anderen Wert an rand() übergibt zb. in Millisekunden oder so. Oder hatt jemand bessere Lösungswege?


Ich freue mich auf eure Hilfe,
Gruß NixNutz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.04.2006, 14:29 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


der trick ist srand nur einmal am anfang aufzurufen...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.04.2006, 15:03 Uhr
Pler
Einer von Vielen
(Operator)


Das gemeine an der Sache ist, dass es manchmal funktioniet. Nämlich dann, wenn time( NULL ) zufällig gerade zwei verschiedene werte liefert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.04.2006, 15:07 Uhr
mauralix



Hier kann es nur sehr selten funktionieren.
time(NULL) gibt die Sekunden seit dem UNIX Zeitstempel.
Und weil nur
würfelzahl1 = rand() % 6 +1; dazwischen steht ist natürlich nie die Sekunde vergangen außer du hast nen extrem lahmen Prozessor der für die Zeile schon ne Sekunde braucht
--
nur olfaktorisch fassbar....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.04.2006, 16:43 Uhr
~NixNutz
Gast


Und wie ist nun des Rätselslösung?
Kann man einen Anderen Parameter als "NULL" an time() übergeben?

Gruß
NixNutz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.04.2006, 17:18 Uhr
0xdeadbeef
Gott
(Operator)


Der trick ist, den RNG nur einmal zu seeden, also

C++:
srand(time( NULL ))
würfelzahl1 = rand() % 6 +1;
würfelzahl2= rand() % 6 +1;


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
12.04.2006, 07:46 Uhr
~NixNutz
Gast


Kann man auch andere "Zeitstempel" an srand() übergeben? Wen Ja, wie?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
12.04.2006, 10:14 Uhr
virtual
Sexiest Bit alive
(Operator)


Du solltest Dir mal die "Mühe" machen,
- Die Dokumentation von srand zu lesen
- Die Postings zu lesen dieses Threads zu lesen
- Die FAQ zu lesen

Sollte Deine Frage danach noch immer nicht geklärt sein, dann kannst Du ja mal mitteilen, was Du genau nicht verstanden hast.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
13.04.2006, 08:32 Uhr
~NixNutz
Gast


-FAQ hab ich gelesen, da wird srand() leider nicht erwähnt.

-Postings hab ich natürlich auch gelesen, mauralix hat das Problem gut erklärt

-die Dokumentation von srand() (hier klicken) ist auf Englisch und daher schwer für mich zu verstehen aber nichts desto trotz hab ich versucht Sie zu verstehen aber da wird nur etwas mit "seed" erwähnt

Gruß
NixNutz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
13.04.2006, 08:46 Uhr
(un)wissender
Niveauwart


Es gibt auch x-Dokus in deutsch.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: