📕博主介绍:目前大一正在学习c语言,数据结构,计算机网络。
c语言学习,是为了更好的学习其他的编程语言,C语言是母体语言,是人机交互接近底层的桥梁。
本章用循环去写一些题目。
让我们开启c语言学习之旅吧!
一.前言
经过前面一系列的学习,我们对循环分支,有了一定的了解。我们能不能把之前学过的东西很好的串联起来呢?用之前学过的东西来写一个猜数字游戏,写完之后你会发现非常有成就感,让我们更加有动力有信息的学下去。
首先写这个东西之前我们要对他进行一些分析,需要哪些功能呢?大致可以分为这几个模块,打印菜单,生成一个数字,根据用户输入的信息进行判断并且反馈给用户。
二.打印菜单
在玩游戏之前,用户会看菜单进行选择。在这个游戏中可以给用户两种选择:1.玩游戏,2.退出游戏。通过分析,写出了这样一个代码。
这个逻辑是实现了,可是程序会有一些缺陷,只会进行一次判断,当玩了一把不过瘾怎么办?应该对程序进行一些优化,把这个过程循环起来。
这个时候程序就可以进行多次选择判断了, 我认为在这种场景下用do while循环会比较合适,在任何情况下都会执行一次程序,当我们输入0的时候循环条件不成立,就终止循环退出游戏。
到了这一步这个程序的基本框架就已经写出来了,接下来就把程序的具体功能实现出来。
三.生成随机数
生成一个随机数是这个程序的灵魂,也是最难的地方。
c语言有一个函数rand可以生成一个随机数,他的头文件是<stdlib.h>。rand函数要和srand配合使用,srand是一个初始化随机数生成器。如果想要正确的使用srand就要给srand传递一个变化的值,计算机上的时间是时刻发生变化的。
代码如下
int ret=rand(); srand((unsigned int)time(NULL));
注:time函数可以返回一个时间戳,time函数的头文件是<time.h>
这样随机生成一个数字的问题就解决了,但是为了让游戏更加好玩需要限制范围,生成一个100以内的数字,任何数%100的结果都会在100以内。
代码如下
int ret=rand()%100;
关于随机生成一个数字的知识就学这么多,以我们现在的知识储备也很难学好,后期再慢慢来。
四.猜数字
当生成了一个随机数之后就要进入猜数字环境了,在这里需要封装一个game函数,game函数的主要功能是更具用户输入的值进行判断。
比如说:a>猜大了:提醒猜大了,继续猜。
b>猜小了:提醒猜小了,继续猜。
c>猜对了:恭喜你,猜对了,游戏结束。
代码如下:
注 :会进行重复的判断和输入,直到猜对执行break退出程序。
效果如下:
整个程序的代码:
#include <stdio.h> #include <stdlib.h> #include <time.h> void menu() { printf("********************************\n"); printf("************1.paly**************\n"); printf("************0.exit**************\n"); printf("********************************\n"); } void game() { int ret = rand()%100; int guess = 0; while (1) { printf("请输入你要猜的数字"); scanf("%d", &guess); if (guess > ret) { printf("猜大了\n"); } else if (guess < ret) { printf("猜小了\n"); } else { printf("恭喜你,猜对了\n"); break; } } } int main() { int input = 0; srand((unsigned int)time(NULL)); 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; }
五.总结
突然发现我们已经可以写出一个70行左右代码的程序了,这是一种成长。相信读者从文章中,可以感受到我们是需要什么写什么。有个术语专门描述这种思路,“TDD”测试驱动开发,根据需要,敲出代码进行测试,这个过程就是在驱动我们进行开发。