猜数字游戏

博客介绍猜数字游戏代码实现,创建了menu和game两个函数。menu函数用于判定是否游戏,game函数先随机生成数,因rand()是伪随机函数,需用时间戳改变初始值,可添加srand((unsigned int)time(0))。还介绍用户输入数与随机数比较,用while(1)循环,相等时用break跳出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

猜数字游戏:随机生成一个整数(0-100),用户进行猜

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int menu(){
	int choose = 0;
	printf("********************************\n");
	printf("0:退出	1:开始游戏\n");
	printf("请输入你的选择:\n");
	printf("********************************\n");
	scanf("%d", &choose);
	return choose;
}
int game(){
	int to_guess = rand() % 100 + 1;
	int num = 0;
	while (1){
		printf("请输入你猜的数子:\n");
		scanf("%d", &num);
		if (to_guess >num){
			printf("低了!\n");
		}
		else if (to_guess < num){
			printf("高了!\n");
		}
		else{
			printf("你猜对了!\n");
			break;
		}
	}
}
int main(){
	srand((unsigned int)time(0));
	while (1){
		int choice = menu();
		if (choice == 1){
			game();
		}
		else if (choice == 0){
			printf("goodbye!\n");
			break;
		}
		else{
			printf("输入有误!请重新输入\n");
		}
	}
	system("pause");
	return 0;
}

这个代码用户创建了两个函数,一个为menu函数,一个为game函数
menu :main函数调用menu函数,接受一个返回值,这个返回值可以判定用户是否进行游戏
game :
1.随机生成一个数
用rand()函数( #include<stdio.h> ) 可以随机生成一个数,但是当你运行代码时,你猜对第一个数后,你再次运行代码,你输入你第一次运行代码猜对得数,你会发现又猜对了,但这样的代码是不符合预期的.
这是因为rand()函数产生的是伪随机函数,所谓的“伪随机数”指的并不是假的随机数,其实绝对的随机数只是一种理想状态的随机数,计算机只能生成相对的随机数即伪随机数。
系统在调用rand()之前都会自动调用srand(),如果用户在rand()之前曾调用过srand()给参数seed指定了一个值,那么 rand()就会将seed的值作为产生伪随机数的初始值;而如果用户在rand()前没有调用过srand(),那么系统默认将1作为伪随机数的初始 值。如果给了一个定值,那么每次rand()产生的随机数序列都是一样的。所以我们就要让它产生的随机数的初始值是改变的,这就涉及到一个时间戳的概念 (是以1970年1月1日0时0分0秒为基准,计算当前时刻和基准时刻的秒数之差. 可以用 time(0) 或者 (time(NULL) (#include<time.h)).这样就保证了产生随机数的初始值是改变的.
如果你添加上srand(time(0)),你会发现可能会给你警告,这是因为srand()的函数参数是一个
unsigned int型,而time的返回值是一个unsigned long long 型,字节不同可能会造成数据的丢失,但是在这个代码中我们可以不用考虑这个,消除警告我们可以强制转换,即改为
srand((unsigned int)time(0))
2.比较数
用户从键盘输入一个数和随机数进行比较,在不停比较的这个过程中可以用whlie(1),这虽然是一个死循环,但是当你输入的数和随机数相等时可以用break跳出这个循环
在main函数中调用menu函数,当返回值为0时,break跳出while(1)循环,退出游戏.当返回值为1时,调用game函数,进行游戏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值