2017-02-15 17 views
2

私はsand()を使っていますが、rand()で簡単な例を作っていますが、関数は常に同じ番号を返します。rand()は同じ番号を返します

これはコードである:

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int generate(int min, int max) 
{ 
    srand(time(NULL)); 
    return rand() % (max - min + 1) + min; 
} 

int main() 
{ 
    int i; 
    for (i = 0; i < 10; i++) 
    { 

     printf("Number random %d = %d\n", i, generate(1, 100)); 
    } 

    return 0; 
} 

実行:

番号ランダム0 = 40数ランダム1 = 40数4 = 40ランダムランダム2 = 40数 ランダム3 = 40の数数字のランダム5 = 40数字のランダム 6 = 40数字のランダム7 = 40数字のランダム8 = 40数字のランダム9 = 40

+2

たら、それを呼び出します。アプリケーションの起動時に毎回 '' srand''を使うべきではありません。ところで、古い学校の '' rand''の代わりに '' ''を使うことを考えてください。 –

+1

あなたの主な機能の始めに乱数を一度試してみてください – flotto

+0

ありがとう、それは動作します! –

答えて

4

あなたはそれを毎回再シードされているので、それがあり、そして、あなたのプログラムはおそらく、非常に迅速にあなたのシード値を実行時に(時間())は、最小の増分が1秒であるため、各コールで同じです。

ではなくmain()srand()を動かしてみて、あなたは新しいシードごとの使用を強制するべきではありません

1

繰り返してsrandと呼ぶと、ジェネレータの統計的性質が失われます。

これを1回だけ呼び出します。

(観察された挙動はtime(NULL)は、ループの反復ごとに同じ値を返すことによって引き起こされます。)

関連する問題