2016-11-07 1 views
0

Ich versuche, eine Zufallszahl/einen Buchstaben mit rand() zu erstellen, aber es gibt nur die gleiche Zahl/den Buchstaben jedes Mal zurück, wenn es aufgerufen wird.Zufallszahlengenerator - keine Zufallszahl jedes Mal erzeugen

void Location::pick() { 
    srand(time(NULL)); 
    x = rand() % fieldSize + 1; 
    int locy = rand() % fieldSize + 1; // rand y 
    switch (locy) { 
    case 1: y = 'a'; break; 
    case 2: y = 'b'; break; 
    case 3: y = 'c'; break; 
    case 4: y = 'd'; break; 
    case 5: y = 'e'; break; 
    } 
} 

fieldSize ist auf 5 eingestellt. Ich benutze srand() an der Spitze. Im Folgenden nenne ich die Funktion.

flotteSize ist auf 5 eingestellt. Ships [] ist ein Array von 5 Schiffen. setLocation() setzt den Ort des Schiffes auf den gegebenen Parameter.

+1

Verwenden Sie nicht 'rand()', vor allem nicht 'rand()% n'. Lesen Sie mehr [hier] (http://www.azillionmonkeys.com/qed/random.html). Verwenden Sie stattdessen "srand" mit der Zeit als Parameter. –

+0

wieder geöffnet, da der Code ein wenig anders ist. Sehr verwandt: http://stackoverflow.com/questions/37701567/calling-a-random-number-generating-member-function-doesnt-produce-entirely-rand – NathanOliver

+0

Alles über diesen Code ist kaputt. Mehrere Seedings, die 'time (NULL)' als Seed verwenden, mit 'rand()', wobei '%' verwendet wird, um den Bereich der Zahlen zu begrenzen ... Ich weiß nicht einmal, wo ich anfangen soll. – nwp

Antwort

2

Pseudozufallsgeneratoren erzeugen dieselbe Sequenz von "zufälligen" Zahlen für denselben Keim.

Der Generator wird wiederholt mit der Zeit in Sekunden seediert. Du machst es 5 mal sehr schnell. Daher ist die Zeit für jede Iteration immer gleich. Daher erhältst du die erste Nummer dieser Sequenz und es wird immer dieselbe sein.

Verwandte Themen