展示程序与程序解析
一、展示程序与效果
程序如下:
# define _CRT_SECURE_NO_WARNINGS 1
# include <stdio.h>
# include <stdlib.h>
# include <time.h>
void menu()//开始选择是否开始游戏
{
printf("********************
");
printf("**** 1.开始游戏 ****
");
printf("**** 0.退出游戏 ****
");
printf("********************
");
printf("请选择是否开始游戏:>");
}
void game()//选择开始游戏后进入游戏
{
int guess;
srand((unsigned int)time(NULL));//下面的讲解
int ret = rand()%100;
//生成一个随机的100以内的数字(不包括100,想包括100就在后面+1)
int count = 5;//一共有5次机会
while (count)
{
printf("您还有%d次机会
", count);
printf("请输入一个数字:>");
scanf("%d", &guess);
if (guess == ret)
{
printf("恭喜您猜对了!!!
");
break;
}
else if(guess < ret)
{
printf("猜小了!
");
}
else if (guess > ret)
{
printf("猜大了!
");
}
count--;
}
if (count == 0)
{
printf("很遗憾,五次机会用完,挑战失败,答案是%d
",ret);
}
}
int main()
{
int input;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1://选择1进入game()函数进入游戏
game();
break;
case 0:
printf("期待您的下次游戏
");
break;
default:
printf("输入错误,请重新输入
");
break;
}
} while (input);//选择0,退出游戏即推出循环
return 0;
}
VS运行效果如下:


二、程序解析
一共两个部分,一为相关知识讲解,二为函数讲解
第一部分:相关知识随机数
想必各位看到srand((unsigned int)time(NULL));时一定相当困惑这是什么玩意儿?啊我上过翁恺老师的课,明明rand()就可以生成一个随机数为什么还要用一个srand()呢?
其实rand()生成的数是受srand(n)里面的n控制的,当n不变时,rand()生成的数的是相同的,单一次看的话确实时随机的,但是多运行几次,就会发现(如图所示,运行了两次)所以从多次运行的结果来看rand()并不是真正的随机数。
不加srand()时(并不表示没有srand,系统会给你默认n = 1):
VS第一次运行:

VS第二次运行:

后面运行多少次都是一样的一组数,单次运行随机,多次运行相同
加上srand(n):n = 1;运行多少次都一样的数字组和,顺序都一样

......
改变n,n = 0;

哈哈哈哈也可以把srand()弄到循环里面去

所以rand()生成的数和srand()相关,那么rand()就不是真正的随机数。
那么问题又来了,srand里面是数不断改变的时候,rand()才是随机数,那么srand()里面的数从哪里来呢,那么time()就登场了,time()是什么?time()返回的值就是时间戳,是指的现在的时间,距离1970年1月1日经过了多少秒,你运行程序的北京时间不同那么time返回给srand 的数字就是一个一直在改变的数,由此rand()生成的数就是真正随机的数字。
计算时间戳的网站:时间戳(Unix timestamp)转换工具 - 在线工具

那么srand((unsigned int)time(NULL));和rand();就生成了一个随机的数。
第二部分:函数讲解
int main()
{
int input;
do
{
menu();
//程序运行到这里会展示
//********************
//**** 1.开始游戏 ****
//**** 0.结束游戏 ****
//********************
scanf("%d", &input);
switch (input)
{
case 1://选择1进入game()函数进入游戏
game();
break;
case 0:
printf("期待您的下次游戏
");
break;
default:
printf("输入错误,请重新输入
");
break;
}
} while (input);//选择0,退出游戏即推出循环
return 0;
}
主函数在do while循环中调用了两个函数menu()和game()
menu()就显示了一个游戏开始的界面,让你选择进入游戏还是不进入游戏
void menu()//开始选择是否开始游戏
{
printf("********************
");
printf("**** 1.开始游戏 ****
");
printf("**** 0.退出游戏 ****
");
printf("********************
");
printf("请选择是否开始游戏:>");
}
game()就是当你选择进入游戏后,会随即生成一个100以内的数字,你有5次机会进行猜测,猜对和次数用完没猜对,回到do while的循环开始,又重新展示menu()的游戏开始界面,如此循环
void game()//选择开始游戏后进入游戏
{
int guess;
srand((unsigned int)time(NULL));//下面的讲解
int ret = rand()%100;
//生成一个随机的100以内的数字(不包括100,想包括100就在后面+1)
int count = 5;//一共有5次机会
while (count)//机会用完跳出循环
{
printf("您还有%d次机会
", count);
printf("请输入一个数字:>");
scanf("%d", &guess);
if (guess == ret)
{
printf("恭喜您猜对了!!!
");
break;//猜对了就可以跳出循环
}
else if(guess < ret)
{
printf("猜小了!
");
}
else if (guess > ret)
{
printf("猜大了!
");
}
count--;
}
if (count == 0)//机会用完都没有猜出正确的数字
{
printf("很遗憾,五次机会用完,挑战失败,答案是%d
",ret);
}
}
猜数游戏,好玩指数???