猜数字游戏(C语言)

猜数字游戏

编译环境VS2017

猜数字游戏,顾名思义,是需要人们猜测一个未知但已确定的数,此问题中还规定了范围0~99。其中,这个未知但要确定的数就要由编写程序来产生,当这个数生成后我们猜数字,程序告诉我们猜的高了,低了,或猜对了来提示我们猜数。

这个未知但已确定的数我们可以用随机数来代替,运用rand()函数可以产生产生随机数,但产生的随机数并不是真正意义上的随机数,因为rand的内部实现是用线性同余法做的,他并不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的。
rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand ()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。
srand()用来设置rand()产生随机数时的随机数种子。其参数必须是个整数,通常可以利用time(0)的返回值来当做参数。如果每次参数都设相同值,rand()所产生的随机数值每次就会一样。
例如:当不设置随机数种子时每次产生随机数都一样,如下

int num[10];
	for (int i =0; i < 10; ++i) {
		num[i] = rand()%100;
		printf("%d\t", num[i]);
	}

这段代码每次运行产生的随机数列都不变如下:
在这里插入图片描述
当设置变化的随机种子后
即添加代码srand((unsigned int)time(0));


	int num[10];
	srand((unsigned int)time(0));
	for (int i =0; i < 10; ++i) {
		num[i] = rand()%100;
		printf("%d\t", num[i]);
	}

即运行结果为:

在这里插入图片描述

再次运行结果为
在这里插入图片描述
可以看出,设置变化的时间戳作为随机种子后生成的随机数组不再重复
需要注意的是time(0)返回值与srand()中参数类型并不同,srand()中参数类型为unsigned int型,为避免警告,需要进行类型强制转换
具体实现如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void Menu() {
	printf("**************************\n");
	printf("   1.开始游戏\n");
	printf("   0.退出游戏\n");
	printf("**************************\n");
	printf("请输入您的选择\n");
}
void fun() {
	int x;
	srand((unsigned int)time(0));//用时间戳来改变每次产生的随机数序列
	int to_guess = rand() % 100;//产生0到99的随机整数
	while (1) {
		printf("请输入您猜的数字\n");
		scanf("%d", &x);
		if (x > to_guess) {
			printf("高了\n");
		}
		else if (x < to_guess) {
			printf("低了\n");
		}
		else {
			printf("猜对了\n");
			break;
		}
	}
}
int main() {
	int num;
	Menu();
	scanf("%d", &num);
	system("cls");
	if (num == 1) {
		fun();
	}
	if (num == 0) {
		printf("再见!\n");
	}
	system("pause");
	return 0;
}

运行结果如下:
在这里插入图片描述
在这里插入图片描述
再次运行后:
在这里插入图片描述

  • 18
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值