2

重複の可能性:
rand() で常に同じ乱数列を取得するのはなぜですか?

ええ、これは少しお粗末に思えるかもしれませんが、Java で合理的になった後に C を独学しているので、すでにいくつかの問題に遭遇しています。C で rand() 関数を使用しようとしていますが、一度しか呼び出すことができず、呼び出すと常に同じ乱数 (41) が生成されます。Microsoft Visual C++ 2010 Express を使用しています。 Cコードをコンパイルするように設定済みですが、動作しないのはこのrand()関数だけです。一般的に使用されるライブラリをいくつか含めてみましたが、何も機能しません。コードは次のとおりです。

#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"

int main(void)
{
    printf("%d", rand()); //Always prints 41

    return 0;
}
4

5 に答える 5

4

これはrand()、 が実行開始時に常に同じポイントから疑似ランダム シーケンスを初期化するためです。

rand()異なる値を取得するために使用する前に、本当にランダムなシードを入力する必要があります。srandこれは、渡されたシードに従ってシーケンスをシフトする関数を介して実行できます。

試してみてください:

srand(clock());   /* seconds since program start */
srand(time(NULL));   /* seconds since 1 Jan 1970 */
于 2012-04-07T16:32:15.727 に答える
3

シードする必要がありますrand()

srand ( time(NULL) );通常、ランダムシードを初期化するために使用されます。さもないと、

于 2012-04-07T16:31:39.760 に答える
2

rand() を呼び出す前にシードが必要です。srand (time (NULL))" "を呼び出してみてください

于 2012-04-07T16:31:49.550 に答える
2

まず、srand() を使用してランダム シードを初期化する必要があります。

#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"

int main(void)
{
    srand(time(NULL)); // Initialise the random seed.
    printf("%d", rand());
    return 0;
}
于 2012-04-07T16:33:43.687 に答える
1

rand()ランダムな値を提供しますが、最初にシードする必要があります。問題は、同じシードを使用してコードを複数回 (おそらく) 実行するとsrand(time(NULL))rand(); 常に同じ値を返します。

srand(time(NULL))次に、2 番目のオプションは、Thiruvalluvar が言うように実行することrand()です。

上記のものは、1000個の乱数を提供します。このコードを実行して、何が起こるか見てみましょう:

srand (time(NULL));
for (int i=0; i<1000; i++)
    {
    printf ("Random number: %d\n", rand());
    }

それが役に立てば幸い!

于 2012-04-07T16:41:23.890 に答える