Miért adja mindig ugyan azt a "random" eredményt a c++?
1.18-nál mindig "kifagy". Miért csinálja ezt?
Elméletileg ennek teljesen randomnak kellene lennie, és
1.00 tól 1000ig is elmehetne, viszont 1.18-on nem jut túl sosem.
Egyébként az ötlet a Crash nevű online szerencsejátékból származik.
Mert a rand függvényt inicializálni kell első használat előtt.
Main elejére rakj egy ilyet:
srand(time(NULL));
include-olj, meg esetleg névterek ha kellenek, és máris jobb lesz.
Azért mindig ugyanazt az értéket adja vissza, mert az std::rand() pszeudo-véletlenszámot generál, aminek kell adni egy "kezdőértéket" (seed).
Ha ezt nem adod meg, akkor automatikusan ugyanazt az értéket állítja be, így a generált pszeudo-véletlenszám is ugyanaz lesz.
"If rand() is used before any calls to srand(), rand() behaves as if it was seeded with srand(1)."
Érdemes az std::srand() és az aktuális idő (std::time(0)) segítségével változó "kezdőértéket" generálni - lásd:
Ja és ilyen nem kell, és amúgy is szabálytalan:
fflush(stdout);
Töröld a g...be
Nem ismerem a kérdéses játékot, de a programodhoz írtam egy variációt, három tizedesjegyre. Bár nem sok közöm van a programozáshoz, hátha tanulságos lesz egy másik próbálkozást is szemügyre venned, a tanult kollégák meg majd kijavítják, ha marhaságok kerültek bele, az pedig már kettőnknek hasznos...
Az „1.00 tól 1000ig” határokat nem egészen értem. A számláló 0.0-ról indul, és amennyire látom, legalábbis elvi akadálya nincs annak, hogy akármeddig növekedjen, akár át is forduljon, és a mínusz tartományban folytassa – ha nem is túl valószínű. Én mindenesetre raktam bele egy korlátot 2.0-ra, igaz, hogy valójában még azt is ritkán éri el. Itt a kód:
További kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!