void main()
{
srand((unsigned int)time(NULL));
int input;
do
{
printf("##*********************##\n");
printf("##*****请输入1开始游戏**##\n");
printf("##*****请输入0退出游戏***##\n");
printf(">");
scanf("%d",&input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏!!\n");
break;
default :
printf("输入错误!!!\n");
break;
}
} while (input);
}
这里主要用到了do-while循环,只要while循环的条件不为0,则一直循环下去。因为我们猜数字不可能只玩一局,所以只要不退出游戏(输入0),就一直猜,直到退出游戏为止。
void game()
{
int ret;
int guess;
ret= rand()%100+1;
while (1)
{
printf("猜猜数字:>");
scanf("%d",&guess);
if (ret > guess)
{
printf("你猜小了\n");
}
else if (ret < guess)
{
printf("你猜大了\n");
}
else
{
printf("恭喜你猜对了\n");
break;
}
}
}
上面是编写的game()函数,应为是猜数字,所以我们用系统里的rand()函数,它执行返回后会随机返回一个数,但是是固定的,是伪随机数,大家可以试着输出rand()函数内容,反复执行程序后从头开始就又会一样。RAND_MAX的16进制是7FFF,换算成十进制也还是很大一个数字,所以为了好猜,选定数字范围是1-100;对随机数除100求余,余数最大也就99,所以+1,才是从1-100。
同理,要想1-30,对随机数除30求余+1就是。为了防止程序重新开始和上次一样。所以我想到一个办法是用时间戳。
时间戳是一组数字,它对应一个时间,而我们的时间是时刻发生变化的,然后这里我们就用到srand();rand也是根据srand()生成随机数的。这里用到的时间函数是time();只要我们运行主程序,它就一直会改变。rand()和srand()函数头文件是"stdlib.h",time()函数头文件是"time.h"。不加会报错。
猜数字也讲究技巧:我们可以用二分法来猜,例如,我们先猜50,如果偏大,就猜25,还是偏大就猜12,一半半的猜会比随便猜更快。