コンテンツ
rand()関数
rand関数は、0からRAND_MAXの範囲の疑似乱数整数を返します。randを呼び出す前に、srand関数を使用して疑似乱数ジェネレーターをシードします。ran関数のヘッダーファイルは<stdlib.h>です。
RAND_MAX
RAND_MAXをVSコンパイラにコピーし、右クリックして[定義に移動]を選択します。RAND_MAXの範囲を表示できます。ここでは、RAND_MAXが0x7fffであり、10進数の32767に変換されていることがわかります。
srand()関数
srand()関数のヘッダーファイルは<stdlib.h>で、呼び出しのタイプは整数で、srand関数の数値は数値です。rand関数は数値からランダムな値を生成します。ランダム値の範囲は、sradn関数の数値から32767までです。
randおよびsrand関数を呼び出す
最初の呼び出し後の結果は365であり、再度呼び出した後も結果は365です。
srand()で数値を変更したら、もう一度呼び出して、このランダムな値が変更されることを確認します。
ランダム値が200に等しい場合、2回目に呼び出すと、生成されたランダム値は691のままです。
したがって、srand()の値が変わらない場合、各呼び出しの結果は同じであることがわかります。毎回生成されるランダムな値を異なるものにするために、time関数を使用して次の値を作成できます。 srand()は時間とともに変化します。
time()関数
time()関数のヘッダーファイルは<time.h>であり、戻り型はtime_tであり、time_tも整数型です。
time()関数の戻り値をsrand()関数に入れると、srand()関数の値は整数であるため、srand()関数の値はいつでも変更され、戻り値は時間のは整数型です。したがって、time()関数を次のようにsrand()関数に配置します
次に、生成されたランダム値をテストし、1〜100のランダム値を生成するように依頼します
これら3つのテストの結果が異なることがわかりました
srand関数を使用して数推測ゲームを実装する
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
printf("*************************\n");
printf("******1.play*************\n");
printf("******0.exit*************\n");
printf("*************************\n");
}
void game()
{
int ret = rand() % 100 + 1;
while (1)
{
printf("请输入一个数字:\n");
int guess;
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else if(guess==ret)
{
printf("猜对了,这个数字是:%d\n", guess);
break;
}
}
}
int main()
{
srand((unsigned int)time(NULL));
int input;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
printf("进入猜数字游戏\n");
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入:\n");
}
} while (input);
return 0;
}