- ベストアンサー
C言語で乱数がうまく効きません。下記のソースでコンパイルして実行すると
C言語で乱数がうまく効きません。下記のソースでコンパイルして実行すると結果が130固定となってしまいます。 #include <stdio.h> #include <stdlib.h> int main(void){ int x; x = rand(); printf("%d",x); return 0; } 使っているコンパイラはBorland C++ 5.5.1です。何か間違いでもあるのでしょうか?よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
コンピュータが出す「乱数」は正確には「疑似乱数」と呼ばれるもので、一見ばらばらの数値に見えますが、実際は一定の法則で計算して出した値です。 疑似乱数には「種」と呼ばれる初期値があって、この種から乱数を発生→その乱数を元に次の種を作る→その種を元に次の乱数を発生→....というようにしていきます。 計算式は一定なので、種が同じなら、同じ乱数が同じ順番で出てきます。 さて、あなたのプログラムですが、種を設定するsrand関数を使っていません。 Cのrand関数では、srandで設定しない場合、種として特定の値が使われます。 種が特定の同じ値なので、それから発生させた乱数も同じ乱数列になります。 種はsrand関数を使って設定します。 常套手段としては、time関数を使って現在時刻(を表す値)を種にするものです。
お礼
プログラムにsrandというものを設定すればいいのですね。さっそくtime.hをインクルードして、「srand((unsigned)time(NULL));」を設定したところ、無事違う数を表示するプログラムができました。これを工夫して、おみくじを作ってみようと思います。