自学内容网 自学内容网

E10.【C语言】练习:编写一个猜数字游戏

目录

1.规则

2.准备

3.游戏代码


1.规则

1.程序生成1-100间的随机数

2.用户猜数字

猜对了:游戏结束

猜错了:程序会告知猜大了或猜小了,继续进行游戏,直到猜对

3.游戏可以一直玩除非退出游戏

2.准备

1.框架:循环结构:do while 先循环(游戏进入主界面)后判断(进行或退出)

2.生成随机数:

#include <stdio.h>
#include <stdlib.h>
int main() 
{
    int random = rand() % 101; // 生成1-100之间的随机数(%101,余数是1-100)
    printf("%d\n", random);
    return 0;
}

每次运行结果都是一样的

 rand函数会返回一个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的大小是依赖编译器上实现的,但是大部分编译器上是32767,因此要配合time函数才能实现真随机数(真正的随机数的是无法预测下一个值是多少的)

rand函数是对一个叫“种子”的基准值进行运算生成的随机数,之所以前面每次运行程序产生的随机数序列是一样的,那是因为rand函数生成随机数的默认种子是1,如果要生成不同的随机数,就要让种子是变化的

-->用srand来设置种子

#include <stdio.h>
#include <stdlib.h>
int main() 
{
    srand(2);
    int random = rand() % 101; // 生成1-100之间的随机数(%101,余数是1-100)
    printf("%d\n", random);
    return 0;
}

 数字3发生变化,但是每次运行结果都是一样的

必须让srand()内的数字发生变化,才能实现真随机数

-->时间戳_百度百科,时间戳在不断变化

time 函数就可以获得这个时间(基于系统维护的内部时钟来计算的),返回值的是1970年1月1日0时0分0秒到现在程序运行时间之间的
差值,单位是秒,类型是time_t,本质上其实就是32位或者64位的整型类型(使用前写#include <time.h>)

time函数原型如下:

time_t time (time_t* timer);

这里不需要指针类型,写成time(NULL);(空指针)即可

但写成srand(time(NULL));会有问题

void srand (1 unsigned int seed);

srand的返回值是unsigned int,time的返回值是time_t,这里要强制类型转换

srand((unsigned int)time(NULL));

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() 
{
    // 设置随机数生成器,设置随机数的起点
    //设置随机种子
    time时间戳,将时间转化为数字,srand();填入不同数字,生成的随机数不同
    srand((unsigned int)time(NULL));
    int random = rand() % 101; // 生成1-100之间的随机数(%101,余数是1-100)
    printf("%d\n", random);
    return 0;
}

3.游戏代码

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <time.h>
void menu()//主菜单函数
{
printf("**********************************************\n");
printf("*******************1.PLAY********************\n");
printf("*******************2.EXIT*********************\n");
printf("**********************************************\n");
printf("请选择:\n");
}
void game()//游戏函数
{
printf("请猜数:\n");
srand((unsigned int)time(NULL));
int random = rand() % 101;//写成rand()%100+1也可以
//printf("%d\n", random);//作弊模式:)
int guess = 0;
while (guess != random)
{
scanf("%d", &guess);
if (guess > random)
printf("猜大了\n");
else if (guess < random)
printf("猜小了\n");
else
{
printf("猜对了\n");
}
}
}
int main()
{
int tmp = 0;
do
{
menu();//调用菜单函数
scanf("%d", &tmp);
switch (tmp)
{
case 2:
break;
default:
{
printf("输入错误,重新选择!\n");
break;
}
case 1:
{
game();
break;
}

}

} while (tmp != 2);
}



补充:如果要生成a~b间的随机数(a<b)

random = rand() % (a+1);

上方生成的是0~a的随机数

略作修改:(0+a)~(b-a+a)

random=a + rand()%(b-a+1)

原文地址:https://blog.csdn.net/2401_85828611/article/details/140315906

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!