2017-11-16 13 views
0

私は0から9の間の乱数を作成する関数を作ったが、iループのインデックスi = 0のmain関数を呼び出すと、 i < n;私は+ +それは1つの乱数n種類を印刷します。しかし、私は異なる値をn回印刷する必要があります。ここ は私が作ったコードである: -cの関数でrand()を使用する

#include<stdio.h> 
    #include<stdlib.h> 
    #include<time.h> 
    void random_variable() { 
    int i; 
    srand(time(NULL)); 
    i = rand()%10; 
    printf("%d ",i); 
    } 
    main() { 
    for(int j=0;j<10;j++) { 
     random_variable(); 
    } 
    } 

出力はこれです: - : here instead of 8 ten times i needed 10 different values

+3

ループ内の 'srand'をやり直さないでください。ループする前に一度やってください。それが再シードされる原因になります。そして、それが10倍も速くループすることができるので、毎回同じ値に再シードされます。私はここで 'ランド 'の不足に陥ることはありません。 – Steve

答えて

1

srand()シーズあなたの乱数 -

出力を見るためにリンクをクリックしてください。あなたは毎回ではなく、一度これをしたい。

#include<stdio.h> 
    #include<stdlib.h> 
    #include<time.h> 
    void random_variable() { 
     int i; 
     i = rand()%10; 
     printf("%d ",i); 
    } 
    main() { 
     srand(time(NULL)); 
     for(int j=0;j<10;j++) { 
      random_variable(); 
     } 
    } 
+0

私はランドを使用している場合()2回I)、その後も私はsrand関数を(使用する必要が乱数の二つの異なるセットを作成する機能、一度だけ –

+0

はい。ほとんどの場合、プログラムごとにsrand()を1回ずつ呼び出す必要があります。 – ale10ander

5

srand()は、標準CライブラリのPRNG(擬似乱数ジェネレータ)を初期化します。 PRNGは、内部的に格納された値に多かれ少なかれ複雑な算術演算を適用し、結果の一部を次の「ランダム」数として返すことによって機能します。 srand()はこの内部状態を設定します。

あなたの機能にsrand()たびに呼び出した場合の内部状態が毎回リセットされているので、あなたは(賢明)の乱数を取得することはできません。あなたのプログラムが始まるとそれを呼び出します。

+0

okk。私は乱数の2つの異なるセットを作成するためにrand()を2回使っているなら、srand()を一度使う必要がありますか? –

+0

@NehalBirla私はこれを説明したと思った... –

関連する問題