c语言入门阶段小测试--猜数字游戏的实现

本文建议C语言初学者在对c语言有了基本的了解(了解库函数,了解简单函数的调用),同时掌握简单的循环语句后食用,快来阶段测试一下前面学的内容吧~~~~~~~~~

猜数字游戏:电脑在1~100个数字中随机生成一个数字,由用户进行循环猜测,每次电脑提示用户猜小了还是猜大了,直至用户成功猜出该数字,后可选择退出或者继续玩游戏。

此外,本程序小测试只是给C语言初学者阶段检验,在不考虑各种极端环境,如输入字符错误,溢出,猜数字中的死循环想提前退出等等情况,用以检验前面学过的几种语法,函数等如何串联在一个程序中。

实现步骤:

1)二话不说,先把C语言基本框架三件套搬出来,库函数,主函数,返回值!qwq

#include <stdio.h>
int main()
{




    return 0;
}

2)再用前几天刚学的几个函数制作一个简易的菜单吧!

void menu()
{
	printf("***********************\n");
	printf("** 1.play     0.exit **\n");
	printf("***********************\n");
}

为了程序的可读性更高,我们选择在main函数外,自定义一个菜单函数menu,后面要频繁使用,只需一句调用就可以了哦,这种习惯要提前养成,不仅为后面的函数章节学习,以后开发一个复杂的程序,都需要封装不同的函数,做到简化程序,可读性更高~

3) 菜单做好,被主函数调用了,是不是要给用户选择啦?

这里定义一个input作为用户输入,选择玩游戏还是退出程序

int input=0;
printf("请选择:>");
scanf("%d", &input);

4)用户如果做出选择,我们又面临着新的问题,如何让电脑知道程序接下来不同分支的走向?是if,else语句对input进行判断吗?好像可以,但是可能有点麻烦。关于选择语句,我们有更简单的方法,就是使用switch-case语句,来看看怎么实现吧:

switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,重新选择!\n");
			break;
		}

这里的game()函数,就是我们游戏逻辑的主题,下面会详细讲解调用rand()函数进行随机数的实现,以及设置随机种子

5)我们在前面题干中说到,如果用户想要玩玩一局,能够继续玩下去,显然上诉代码无法实现,这时我们想起我们学过的几种函数,for,while,do-while函数,由于我们程序跑起来,用户选择1.paly后,二话不说就开始打印菜单,并不是直接就进行条件判断,显然使用do-while循环更方便于是有:

int main()
{
	
	int input=0;
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,重新选择!\n");
			break;
		}
	}while (input);

	return 0;
}

6)到此,简单测试一下基本框架功能是否正常

ok,都没问题,我们继续进行后面game()函数的实现

7)这里我们通过查询网站,书籍获取到,随机数的实现,C语言有专门的rand()函数,此函数如果直接调用,在一次程序运行中,我们会发现每次生成的随机数确实不同,但是我们关闭程序,再次运行后,离谱的发现,这这这生成的随机数竟然和上次一模一样!。。。原来这rand()生成的叫伪随机数,想要实现真正的随机数,在调用rand()函数前,还要设置srand随机数种子,在计算机中,时间转换成的时间戳每时每刻都在改变,因此,使用time作为随机数种子再合适不过了,麻麻再也不用担心我的rand()函数每次生成的都是一样的数了!

srand((unsigned)time(NULL));

8)关于game()函数,还是定义一个input作为用户每次输入猜测的数,将input与num已经生成好的那个随机数比较,num是通过rand()生成的随机数(因为随机数是不固定的),我们将不固定的随机数进行模运算,模100保证生成的数在99以内,加1,实现1-100内的随机数。

再通过if,else语句提示用户猜小了还是猜大了,嵌套入一个死循环while中,直到input和num相等,跳出循环。

!!!记得rand函数引用#include <stdlib.h>,time函数引用#include <time.h>库函数!!!

void game()
{
	int num = rand() % 100 + 1;
	int input = 0;
	while (1) 
	{
		printf("请输入要猜的数字:\n");
		scanf("%d", &input);
		if (num > input)
		{
			printf("猜小了\n");
		}
		else if (num < input)
		{
			printf("猜大了\n");
		}
		else 
		{
			printf("恭喜你,猜对了!就是%d\n", num);
			break;
		}
	}
}

9)附完整代码

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
//猜数字游戏
void menu()
{
	printf("***********************\n");
	printf("** 1.play     0.exit **\n");
	printf("***********************\n");
}
void game()
{
	int num = rand() % 100 + 1;
	int input = 0;
	while (1) 
	{
		printf("请输入要猜的数字:\n");
		scanf("%d", &input);
		if (num > input)
		{
			printf("猜小了\n");
		}
		else if (num < input)
		{
			printf("猜大了\n");
		}
		else 
		{
			printf("恭喜你,猜对了!就是%d\n", num);
			break;
		}
	}
}
int main()
{
	srand((unsigned)time(NULL));
	int input=0;
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,重新选择!\n");
			break;
		}
	}while (input);

	return 0;
}

10)玩一把吧~

  • 16
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

touchinaiyou-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值