• ベストアンサー

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です。何か間違いでもあるのでしょうか?よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

コンピュータが出す「乱数」は正確には「疑似乱数」と呼ばれるもので、一見ばらばらの数値に見えますが、実際は一定の法則で計算して出した値です。 疑似乱数には「種」と呼ばれる初期値があって、この種から乱数を発生→その乱数を元に次の種を作る→その種を元に次の乱数を発生→....というようにしていきます。 計算式は一定なので、種が同じなら、同じ乱数が同じ順番で出てきます。 さて、あなたのプログラムですが、種を設定するsrand関数を使っていません。 Cのrand関数では、srandで設定しない場合、種として特定の値が使われます。 種が特定の同じ値なので、それから発生させた乱数も同じ乱数列になります。 種はsrand関数を使って設定します。 常套手段としては、time関数を使って現在時刻(を表す値)を種にするものです。

参考URL:
http://www001.upp.so-net.ne.jp/isaku/rand.html
bomura
質問者

お礼

プログラムにsrandというものを設定すればいいのですね。さっそくtime.hをインクルードして、「srand((unsigned)time(NULL));」を設定したところ、無事違う数を表示するプログラムができました。これを工夫して、おみくじを作ってみようと思います。