C言語で数当てゲームを作るために乱数関数の正式な使い方を知りたいです
今は
a=(rand()%10)
として、aに0~9までの乱数を割り当てるようなコードを書いていますが
コンパイルしなおしてもなぜか値が8から動きません…
自分が使っている本にはrand関数自体が載っておらず、ネットで拾ったコードの猿真似をしている状態です
ので、この機会に正確な文法を知っておきたいです
またsrand関数についても教えていただけると嬉しいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
srandは乱数を生成するとき元にする数です。
同じ数字が出るとのことですが以下のコードを実行してみるとわかりやすいと思います。
c
1#include <stdio.h> 2#include <stdlib.h> 3 4int main(){ 5 // 下記のsrandの数字を整数の範囲で変更すると 6 srand(1); 7 // srandを変更しないと同じ結果が出る。 8 printf("%d\n", rand()); 9 printf("%d\n", rand()); 10 printf("%d\n", rand()); 11 printf("%d\n", rand()); 12 printf("%d\n", rand()); 13 14 getchar(); 15 return 0; 16}
srandの値が変わればrandの値も変わることが確認できたと思います。
※ANSI Cではsrandが呼び出さる前にrandが呼び出された場合、srand(1)と同じ。
srandが固定されていれば同じ値になってしまうので時間によってsrandを設定します。
c
1#include <stdio.h> 2#include <stdlib.h> 3// time.hを追加 4#include <time.h> 5 6int main(){ 7 // 下記のsrandを時間から設定する。 8 srand((unsigned int)time(NULL)); 9 // randの数字が変化する。 10 printf("%d\n", rand()); 11 printf("%d\n", rand()); 12 printf("%d\n", rand()); 13 printf("%d\n", rand()); 14 printf("%d\n", rand()); 15 16 getchar(); 17 return 0; 18}
また、それぞれの書式は以下のとおりです。
srandの書式は
c
1void srand(unsigned int seed);
引数はunsigned int
なので符号なし整数を引数とします。
また、戻り値はvoid
なのでありません。
randの書式は
c
1int rand(void);
引数はvoid
なので引数なしです。
また、戻り値はint
なので整数が戻ってきます。
なので割る数をnとすると、余りは0~n-1の値を得ることができます。
投稿2015/07/23 16:31
総合スコア50
0
本筋ではありませんが、私もアドバイスとして次の記事を紹介しておきます。
良い乱数・悪い乱数
上にあるとおり、rand()
はかなり質の悪い乱数です。
本格的にゲームなどを作る場合はrand()
は使用すべきではありません。
また、暗号などに使う乱数はまた別で、暗号論的擬似乱数生成器が必要です。
使い方を勉強するだけならrand()
で十分ですが、まとめると、
- C標準のrand()は質が悪い。本格的なアプリは違うのを使うべき。
- 暗号などのセキュリティに関する所は暗号論的擬似乱数生成器というものが必要。
とだけ、覚えておけばいいかと思います。
投稿2015/07/24 13:01
編集2015/07/24 13:03総合スコア21735
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
rand()関数は厳密にはランダムではありません。
実行時に決まった順番で値を返します。
ゲームで使う時は、rand()を常にどっかで呼び出しておいて、
ぐるぐる回しておくか、使う時に、何回か回して、使う
投稿2015/07/24 05:20
総合スコア1021
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。