2012-03-14 8 views
2

可能性の重複:
Generating random numbers in C
using rand to generate a random numbersなぜrand()は常に同じ値を返しますか?

私は乱数を生成しようとしているが、私は常にそのようにそう間違っている可能性がありますどのような数41 を取得しています簡単なスニペット?

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

int main(void) 
{ 
    int a = rand(); 
    printf("%d",a); 
    return 0; 
} 

ありがとうございます。

+1

。 「Cの乱数」を検索すると、多数の答えが表示されます。私がリンクしているのは、あなたが '41'を作っているのとまったく同じです。 –

+0

私は41が無作為に選ばれたと確信しています。私はちょうど乱数を選んで、41を得ることを試みなかった。 –

+6

それほど近い。 42はもっと良いでしょう... –

答えて

9

は、次の例のように、異なるシードを与える必要があります。これは、SOに何度も頼まれてい

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
int main(void) 
{ 
    int a; 
    srand (time(NULL)); 
    a = rand(); 
    printf("%d",a); 
    return 0; 
} 
2

ジェネレータをシードする必要があります。

これが期待されています。理由は、結果の再現性のためです。ランダムなシーケンスを使用してテストを実行し、特定の時間または反復の後にテストが失敗するとしましょう。シードを保存する場合は、テストを繰り返して複製/デバッグすることができます。エポックからの現在の時間をミリ秒単位でシードし、予想どおりにランダムを取得します(結果を繰り返す必要がある場合は種を保存します)。

+0

私は(言いましょう:12)srand (12)前に数値が変わりますが、それでも一定です。 – Umut

+0

@UmutŞenaltan:同じ値のシードは*同じランダムシーケンスを作成します。 https://en.wikipedia.org/wiki/Pseudorandom_number_generator –

+1

こちらをご覧ください。理由は、結果の再現性のためです。ランダムなシーケンスを使用してテストを実行し、特定の時間または反復の後にテストが失敗するとしましょう。シードを保存する場合は、テストを繰り返して複製/デバッグすることができます。エポックからの現在の時間をミリ秒単位でシードし、予想どおりにランダムを取得します(結果を繰り返す必要がある場合は種を保存します)。 – Java42

関連する問題