猜数游戏需要电脑产生一个0-100之间的随机数,然后用户输入自己猜的数,系统提示用户猜大或猜小,然后继续猜数,直到用户猜对为止。
由于猜数游戏需要每次产生不同的一随机数,于是便初次接触使用rand()函数和srand()函数,这两个函数作为库函数,被包含在stdlib.h文件中,故使用时要加上头文件。先来了解一下这两个函数。
rand()函数
函数声明:int rand(void);
函数功能:返回一个范围在 0 到 RAND_MAX 之间的伪随机数,RAND_MAX是一个常量,在不同的实现中会有所不同,但至少是32767。
注:未设定随机数种子时,系统默认的随机数种子为 1。则每次产生的值是相同的。
如果只用此函数,rand() 产生的是伪随机数字,每次执行时是相同的; 若要不同, 用函数 srand() 初始化它。
srand()函数
函数声明:void srand(unsigned int seed);
函数功能:播种由函数 rand 使用的随机数发生器,用来设置 rand() 产生随机数时的随机数种子,不返回任何值。
参数说明:seed – 这是一个整型值,用于伪随机数生成算法播种。
注:参数 seed 必须是个整数,如果每次 seed 都设相同值,rand() 所产生的随机数值每次就会一样。
有了这两个函数,猜数游戏就很简单了。上代码:
#include<stdio.h>
#include<time.h>//包含time函数
#include<stdlib.h>//包含rand函数
int main()
{
int ret, n;
while (1)
{
system("cls");//清屏
//初始化随机数发生器
srand((unsigned)time(NULL));
//返回0-100之间的随机数
ret = rand() % 100;
//printf("%d\n", ret);//这行代码用于测试
printf("猜猜我是0-100中的哪一个?\n");
while (1)
{
printf("请输入你猜的数:");
scanf("%d", &n);
if (ret == n)
{
printf("恭喜你,猜对了!\n");
break;
}
else if (ret < n)
{
printf("你猜大啦,再猜一次吧!\n");
}
else
{
printf("你猜小了,再猜一次吧!\n");
}
}
printf("退出输入0,继续玩游戏输入其他数字,请输入:");
int t;
scanf("%d", &t);
if (0 == t)//退出程序
{
//return 0;
exit(0);
}
}
return 0;
}
基本功能实现后稍微处理对代码稍加改进,将功能打包成函数,使程序模块化,使得游戏更加有互动性并可以多次游戏
#include<stdio.h>
#include<windows.h>
#include<time.h>
void menu()
{
printf("**********************************\n");
printf("********* 1.play ********\n");
printf("********* 0.exit ********\n");
printf("**********************************\n");
}
void game()
{
//1.生成随机数
//2.猜数
int ret=0;
int guess = 0;
ret = rand()%100+1;//产生1-100的随机数
while (1)
{
printf("请输入你要猜的数字(1-100):");
scanf("%d", &guess);
if (ret <guess)
{
printf("猜大了,再猜一次吧。\n");
}
else if (ret>guess)
{
printf("猜小了,再猜一次吧。\n");
}
else
{
printf("猜对了\n");
break;
}
}
}
int main()
{
srand((unsigned int)time(NULL));//time(NULL)随机数起点,time()返回一个时间戳
//srand函数整个工程调用一次就行,所以在主函数中调用一次就行
int tmp = 0;
do
{
menu();
scanf("%d", &tmp);
system("cls");
switch (tmp)
{
case 1:game(); break;
case 0:exit(0);
default:
printf("输入错误,请重新输入:");
}
} while (1);
return 0;
}
程序小白所写,如发现错误,请大佬指出,望共同进步!