hallo leute, wie erzeuge ich eine zufallszahl mit random, die sich beim aufruf der random funktion auch ändert? folgender quellcode liefert immer die gleiche zahl: void zufallszahl () { int i; rand ((unsigned) time(NULL)); for(i = 1; i <= 1; i++) { zahl = 0 + ( rand() % 255); printf("erzeugte Zufallszahl %i \n\r" , zahl); return (zahl); } } ich benötige bei jedem aufruf von zufallszahl() allerdings eine andere zahl zwischen 0 und 255.kann mir jemand weiterhelfen?!danke schonmal
Hi, das ist nun mal die Art nach der rand() arbeitet. Diese Funktion erzeugt immer die gleichen Zufallszahlen. Das liegt daran, dass der Computer diese Zufallszahlen ja immer mit einem bestimmten Algorithmus berechnen muss. Da der Computer aber "dumm" ist liefert er immer die gleichen Zahlen, da er immer den gleichen Algorithmus benutzt. Um das zu vermeiden gibt es den srand() Befehl der den Generator mit einem bestimmte Wert initialisiert. Meist wird hier einfach die Computerzeit übergeben.
1 | #include <stdlib.h> |
2 | #include <time.h> |
3 | |
4 | void zufallszahl() |
5 | {
|
6 | int i; |
7 | int zahl; |
8 | |
9 | srand(time(0)); |
10 | |
11 | for(i = 1; i <= 1; i++) |
12 | {
|
13 | |
14 | zahl=+(rand()%255); |
15 | |
16 | printf("erzeugte Zufallszahl %i \n\r" , zahl); |
17 | |
18 | //return (zahl);
|
19 | }
|
20 | }
|
so hoffe ich konnte Dir helfen. flo
1 | void zufallszahl() |
2 | {
|
3 | int i; |
4 | int zahl; |
5 | |
6 | srand(time(0)); |
Nein. srand() soll/darf in einem Programm nur ein einziges Mal aufgerufen werden! Normalerweise macht man das, wenn das Programm hochfährt in der main() (oder in einer generellen init() Funktion, so man eine hat). Nach diesem (einzigen) Aufruf von srand() lässt man diesen Teil in Ruhe und ruft nur noch rand() zur Generierung der nächsten Zahl auf. Dies ist ganz wichtig, damit rand() in Ruhe arbeiten kann und auch die statistische Verteilung der Zufallszahlen erreichen kann. Wenn du immer wieder srand() aufrufst, dann erhältst du alles mögliche, aber sicher keine Zahlen, die auch nur annähernd auch den simpelsten statistischen Test auf Zufälligkeit schaffen würden.