//猜数字游戏 //1. 电脑随机生成一个随机数 //2.猜数字 #include#include #include void menu() { printf("*********************************"); printf("*** 1. play 0. exit ***********"); printf("*********************************"); } void game() { int guess = 0; // 1. 生成一个随机数 // 拿时间戳来设置时间起点 int ret = rand()%100 +1; // 生成随机数 // 如果将ret = rand();直接放到while里面,会每次循环生成一个数字 // 2. 猜数字 printf("猜数字"); while (1) { scanf("%d", &guess); if (ret > guess) { printf("猜小了"); } else if (ret < guess) { printf("猜大了"); } else { printf("恭喜你,猜对了!"); } } } int main() { int input = 0; srand((unsigned int)time(NULL)); do { menu(); printf("n请选择:>"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("exit the gamen"); break; default: printf("error in this wayn"); break; } } while (input); }
代码如图所示,非常简单有意思的一个小软件,在此尝试回顾本段代码的含义:
首先解释三个第一次遇到的函数 -srand -rand -time()
-srand 函数是随机数发生器的初始化函数(来自百度百科)
-rand 函数是伪随机数发生器,因为每次运行的结果都相同,因此经常配合-srand使用
Remarks: the rand function returns a pseudorandom integer in the range 0 to RAND_MAX.
Use the srand function to seed(设置) the pseudorandom-number generator before calling(调用) rand.
-time() 时间戳函数,返回一个指针,通过时间的不断变化,配合-srand生成真正的随机值
在srand((unsigned int)time(NULL))中,如果使用-srand()返回一个固定值,那么生成的值将会固定,因此我们配合-time()使用,但由于-time()会返回一个time_t类型的指针,因此我们需要用unsigned int强行转换为整型,值得一提的是,time_t在定义中,其实是长整形long类型;另外,-time()需要调用一个指针,我们用NULL(空指针)来代替。因此srand((unsigned int)time(NULL))就完成了。
由此,整个代码最核心的部分,生成一个随机数就已经大功告成了,我们通过控制ret的大小,如代码所示的:
int ret = rand() % 100 + 1;
或者按照自己的意愿确定一个区间,就可以实现。其余内容只不过是对整款代码的添色。
另外值得一提的是在主函数中的do while 语句设置,由于while(input),因此input为真(非零)的时候,会执行循环,所以如果将case 0 换成其他数字,这个界面都会出现bug。
最后
while(1)
{
这里是循环的内容!
}
这样的循环操作对于我这样的小白真的是大开眼界,由于while判断永远为真,只要执行到game();这个函数,这个循环就一定会执行,而不需要任何条件,学习了!
第一次敲出一个互动性代码,还是有点开心,玩了大概10分钟。
最后回顾这篇代码的时候还是有些吃力,对于核心的三个代码的内容还是不怎么清晰,希望自己再接再厉!



