猜数字游戏(C语言)

目录

游戏需求:

rand

srand

time

 代码:


游戏需求:

1.随机生成一个1-100之间的数

2.会随着你猜的数字来提示

3.玩完一次游戏会紧接着下一次


这里需要先了解一下随机数的知识:

rand

C语言提供了一个函数rand,这个函数可以生成随机数

rand的原型:

                  int rand(void);

rand函数会返回一个伪随机数,这个随机数的范围是在0~RAND-MAX之间.RAND-MAX依靠编译器来实现,其中大部分的编译器是32767

rand函数需要头文件  stdlib.h

rand函数是通过某种算法,是对一个叫"种子"的基准值进行运算生成的随机数,其种子的默认值是1,

所以它生成的数字都是按种子内的数字依次输出。想要真正的随机,就要种子不断变化。


srand

为了解决随机数的种子问题,C语言又提供了一个函数,srand函数。它用来初始化随机数的生成器的

原型:

        void srand (unsigned int seed)

参数seed是用来设置rand函数生成随机数的种子

但又有一个问题,想要真正的随机,必须要使种子不断变化,难道要咱们不停使用srand函数吗?这也太麻烦了


time

为了解决上述问题,就要让参数seed不断变化,那什么是不断变化的呢?是时间。

在程序中我们一般使用程序的运行的时间作为种子,time函数可以获得这个时间

原型:

       time_t time (time_t* timer)

返回值类型是time_t类型,其类型本质是32位或64位的整型类型

time函数需要头文件 time.h

time函数会返回1970年1月1日0时0分0秒到现在程序运行时间之间的差值,单位是秒,这个时间差也被叫做:时间戳

time函数的参数类型是time_t*,是个指针。

  • 非NULL的指针,函数会将返回的差值放在timer指向的内存中带回
  • NULL的指针,只会返回这个时间的差值

 :在这里,我们只需要返回时间戳就行了,也就是说这样写就可以了 将time(NULL)代入参数seed


 代码:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void begin()   //游戏开头
{
    printf("*猜数字游戏*\n");
    printf("*1:开始游戏*\n");
    printf("*0:结束游戏*\n");

}
void game()   //游戏主体
{
    int r = rand(srand) % 100 + 1;   //生成随机数
    int num = 0;
    printf("\n");
    printf("请输入一个0-100的整数\n");
    while (1)     //判断提示部分
{
        scanf("%d", &num);
        if (num < r)
            printf("数字小了\n");
        else if (num > r)
            printf("数字大了\n");
        else {
            printf("恭喜你答对了,数字是%d\n", num);
            printf("\n");
            break;
        }
    }
}
int main() {
    srand((unsigned int)time(NULL));   //建立不断改变的种子
    int n = 0;
    do {
        begin();     //使用begin函数
        scanf("%d", &n);      //游戏开始和结束的判断
        if (n == 1) {
            game();   //使用game函数
        }
        else if (n == 0) {
            printf("游戏结束,请下次再来\n");
            break;
        }
        else {
            printf("\n");
            printf("选择错误,请输入1或0\n");
        }
    } while (1);
    return 0;
}

 

这只不过是解法的一种,你来试试别的吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值