[解決済み] rollDice関数内でsrand(time(NULL))を呼び出すと問題が発生する。
2022-02-19 14:12:33
質問
最初に使用したとき
srand(time(NULL))
で
rollDice()
関数は動作しませんでした。しかし、mainの中に入れると、うまくいくのです。なぜでしょうか?
そのロジックを教えてください。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int rollDice(void) {
return (1+rand()%6) + (1+rand()%6);
}
int main(void) {
int roll;
srand(time(NULL));
roll = rollDice();
printf("You rolled %d.\n", roll);
enum Gamestatus {WON,LOST,CONTINUE};
enum Gamestatus status;
while(status==CONTINUE){
printf("You are rolling again: \n");
printf("You rolled %d\n", roll = rollDice());
if (targetPoint==roll){
printf("You win!");
status=WON;
}
else if(7==roll){
printf("You lost!");
status=LOST;
}
else
status=CONTINUE;
}
return 0;
}
解決方法は?
何百万冊もの本があり、乱数が何列にも並んでいるとします。 乱数を取得する前に、本を選択する必要があります。
本を手に入れたら、乱数を得るために、本から数字を順番に読んでいきます。
本を変えると、別の乱数列が得られる。
同じ本に変更する
は、その本の最初の番号からシーケンスを再開します。
srand()
本を選び、最初から乱数を開始する
rand()
選択した本から次の番号を読み取る
もし
srand()
ループの中で、乱数列を同じ本の先頭から再開していることになります。
解決策:1冊の本を一度選択し、そこからずっと数字を読み続ける。
C言語プログラムでは、"本を選択"しないと、乱数は1番の本からやってくる
とか、言い換えると
がない場合
srand()
を呼び出すと、関数
rand()
のように振る舞います。
srand(1)
が呼び出されました。
関連
-
[解決済み】Valgrind - strcpyのサイズ1の無効な書き込み
-
[解決済み】Valgrind が "Invalid write of size 8" で文句を言う。
-
[解決済み】C 言語の添え字で配列の要素値を代入すると、配列でもポインタでもベクトルでもない値になる
-
[解決済み] (.text+0x20): `main'への未定義の参照と関数への未定義の参照
-
[解決済み】警告:互換性のないポインタ型からの代入
-
[解決済み】C言語におけるファイルスコープでの可変長配列の変更
-
[解決済み] エラー:整数が期待されるところで集約値が使用された
-
[解決済み】int型配列へのポインタのスカラ・イニシャライザの過剰要素
-
[解決済み] Cプログラムで「配列の添え字が整数でない」。
-
[解決済み】警告:式の結果が未使用の場合
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C 言語の添え字で配列の要素値を代入すると、配列でもポインタでもベクトルでもない値になる
-
[解決済み】Cコンパイルエラーです。Idは1終了ステータスを返した
-
[解決済み】 `S_ISREG()` とは何ですか、そして何をするのですか?
-
[解決済み] strtokのセグメンテーションフォールト
-
[解決済み】警告:互換性のないポインタ型からの代入
-
[解決済み】C言語でint64_t型を表示する方法
-
[解決済み】LinuxのI_PUSHに相当するもの
-
[解決済み】C言語で入力が整数型かどうかチェックする
-
[解決済み】c - 警告:関数 'printf'の暗黙の宣言
-
[解決済み] srand(time(NULL)) はシード値を十分に速く変更しない [duplicate] 。