2016-10-25 5 views
1
int random_var(void); 

int main(void) 
{ 
    int i; 
    for (i = 1; i <= 50; i++) 
     printf("%d\n", random_var()); 

return 0; 
} 


int random_var(void) 
{ 
    srand((unsigned) time(NULL)); 
    return rand() % 2; 
} 

呼び出されるたびに乱数の値が1または0を返す関数を書くことが任されています。私のコードは、私が種子にランダムなジェネレータを使用していても、固定値を返し続けます。1または0のランダムな値を返す関数

+1

あなたは 'return!rand();'できます。誰も、1と0の相対尤度について何も言わなかった。 – EOF

+0

@EOF:あなたはちょうど0を返すことができる。誰も、1と0の相対的な可能性について何も言わなかった。 –

+0

@KeithThompson私は、必要なランダム性を供給するために少しフリップして時折宇宙線に頼っていると推測しますか? – EOF

答えて

1

srand()に一度だけ電話する必要があります。 キース・トンプソンが指摘したように

int random_var(void); 

int main(void) 
{ 
    int i; 
    srand((unsigned) time(NULL)); 
    for (i = 1; i <= 50; i++) 
     printf("%d\n", random_var()); 

    return 0; 
} 


int random_var(void) 
{ 
    return rand() % 2; 
} 

代わりに(またはそれに加えて)、あなたはより良い分配することができる代わりに、上位ビットを、取って試すことができます。

+1

* 'rand()'の実装によっては、偶数と奇数が交互に返されます。 [Comp.lang.c FAQ](http://www.c-faq.com)質問13.18。 –

+0

@KeithThompson、私は今日の1日の制限に達していなかったらあなたのコメントをアップアップしますが、悲しいことに、 [いくつかの一般的な実装はしません...](https://ideone.com/ajAD1Y) – StoryTeller

+0

もちろん、同じ値で再シードすると、同じ結果が得られます。 –

関連する問題