rand関数を使用して数値推測ゲームを実装する方法を教えてください

コンテンツ

rand()関数

RAND_MAX

srand()関数

randおよびsrand関数を呼び出す

time()関数

srand関数を使用して数推測ゲームを実装する


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;
}

おすすめ

転載: blog.csdn.net/weixin_49449676/article/details/124211370