Zufallszahlen mit srand() ohne windowsspezifische Includes?
-
Alle Beispiele die ich bisher gelesen habe arbeiten mit der windows.h
Geht's auch anders? Will nämlich ein Programm für Win & Linux schreiben
-
mit time(NULL) initialisieren anstatt mit GetTickCount oder was auch immer die in den Beispielen benutzt haben
-
UNeverNo schrieb:
Alle Beispiele die ich bisher gelesen habe arbeiten mit der windows.h
Geht's auch anders? Will nämlich ein Programm für Win & Linux schreiben
/* rand example */ #include <stdio.h> #include <stdlib.h> #include <time.h> int main () { /* initialize random generator */ srand ( time(NULL) ); /* generate some random numbers */ printf ("A number between 0 and RAND_MAX (%d): %d\n", RAND_MAX, rand()); printf ("A number between 0 and 99: %d\n", rand()%100); printf ("A number between 20 and 29: %d\n", rand()%10+20); return 0; }
bzw. includes ohne .h
-
Danke für die schnelle Antwort
-
Ich habe mal noch eine ergänzende Frage:
#include <stdio.h> #include <stdlib.h> #include <time.h> int random(int int_von, int int_bis) { int temp; srand(time(NULL)); temp = rand() % (int_bis - int_von) + int_von; return temp; } int main () { for (int i = 0; i < 5; i++) { printf ("%d", i); printf (".\n"); printf ("A number between 5 and 10: %d\n", random(5,10)); printf ("A number between 7 and 13: %d\n", random(7, 13)); printf ("A number between 31 and 49: %d\n", random(31, 49)); printf ("\n"); } getchar(); return 0; }
Wenn ich das Programm 5x durchlaufen lasse kommen immer die gleichen Zahlen dabei heraus, erst wenn ich es 500x laufen lasse sind ab und zu Änderungen dabei (trotzdem sind einige aufeinanderfolgende Werte gleich)
Scheint mir also so, als ob time(NULL) nur mit Sekunden rechnet - kann man dem irgendwie ms beibringen?
-
Hallo,
initialisiere den Zufallgenerator nur einmal, nicht jedes mal wenn du eine Zahl haben willst.
-
Ah, stimmt. Hast Du eine Idee, wie ich das srand in die Funktion verpacken kann, ohne dass es jedes Mal aufgerufen wird?
-
int random(int int_von, int int_bis) { static bool FirstRun = true; if (FirstRun) { srand(time(NULL)); FirstRun = false; } int temp; temp = rand() % (int_bis - int_von) + int_von; return temp; }
So sollte es gehen. Ich halte es aber für sinnvoller, die Funktion srand unabhaengig von der Funktion aufzurufen, als hier so ein Konstrukt reinzubauen
Gruss,
DeSoVoDaMu