• 3.0、C语言——猜数字游戏


    3.0、C语言——猜数字游戏

    首先来说一下随机数生成的方式:

            库函数 rand() 可以帮助我们生产一个随机数字,但是在使用 rand() 函数之前需要用 srand() 函数去设置一个随机起点

    【注意:这里如果不用 srand() 函数去设置起点的话,那么每轮 rand() 函数生成的随机数都是一样的,比如 -> 第一轮生成的5个随机数:1、2、3、4、5
                        第二轮生成的5个随机数:1、2、3、4、5
                        第三轮生成的5个随机数:1、2、3、4、5】

            这个随机起点的参数类型是unsigned int,也就是说要给 srand() 函数一个随机的整型值来作为 rand() 函数的起点才可以,但是我们本来不就是要生成一个随机数么?现在又需要一个随机数起点才能生成另一个随机数,那不是死循环了么...

    这时候我们想到了解决方案 -> 时间戳,先简单解释一下什么是时间戳?

            时间戳 指的就是从 1970 年 1 月 1  日 0 时 0 点 0 分 开始算起,一直到当前时间的总秒数,这段数字就是时间戳,由于时间在不断的前进,所以时间戳也在不断的改变,
            这里再顺便说一下 由于以前的计算机操作系统只有 32位 所以时间戳最多间隔时间只能表示 68年,那么也就是说到了2038 便会达到最大时间,过了这个时间点所有的 32位 操作系统就会出现时间回归的现象 ->也就是全部重置为 10000000 00000000 00000000 00000000 很多软件就会出现异常了,
            时间回归现象的问题 随着 64位 操作系统的诞生得到了解决,因为64位操作系统可以表示到292,277,026,596年,这个时间在千亿年之后了~      

    获取时间戳:

            库函数 time() 会返回系统的时间也就是时间戳【使用的时候记得引入头文件 #include ,查看原码可知 time() 函数返回的类型是一个 time_t 类型,而 time_t 类型其实是被 typedef 重命名了,查看原码可知原来的类型就是 long 长整型;然后 time() 函数还需要一个 指针变量 ,这里可以给他一个 NULL 空指针即可~
            而我们的 srand() 函数需要的参数就是一个 整型参数,那么刚好将 time() 返回的时间戳放到srand() 函数中再将类型 强制转换为 unsigned int 即可,代码如下:

    1. srand((unsigned int)time(NULL));
    2. int random = rand() % 100 + 1; //这里 %100 + 1 指的是随机生产1~100之间的数字

    完整代码如下所示:

    1. #define _CRT_SECURE_NO_WARNINGS 1
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. void menu() {
    9. printf("************************************** \n");
    10. printf("******* 1.play 0.exit ******* \n");
    11. printf("************************************** \n");
    12. }
    13. int game() {
    14. int random = rand() % 100 + 1;
    15. printf("猜数字游戏开始~ 请输入数字~ \n");
    16. int g = 0;
    17. int i = 0;
    18. for (i = 0; i < 3;i++) {
    19. while (getchar() != '\n') {
    20. ;
    21. }
    22. scanf("%d", &g);
    23. if (g > random) {
    24. printf("大了~ 还剩下%d次机会 \n",2-i);
    25. }
    26. else if (g < random) {
    27. printf("小了~ 还剩下%d次机会 \n",2-i);
    28. }
    29. else if (g == random) {
    30. printf("恭喜猜对了~游戏结束 \n");
    31. break;
    32. }
    33. }
    34. if (i == 3) {
    35. printf("三次机会用完了~游戏结束 \n");
    36. }
    37. }
    38. int main() {
    39. srand((unsigned int)time(NULL));
    40. int flag;
    41. do {
    42. menu();
    43. printf("请选择> \n");
    44. scanf("%d",&flag);
    45. switch(flag) {
    46. case 1:
    47. game();
    48. break;
    49. case 0:
    50. printf("游戏结束~ \n");
    51. break;
    52. default:
    53. printf("只能输入 1 或 0 \n");
    54. }
    55. } while (flag != 0);
    56. return 0;
    57. }
  • 相关阅读:
    pytorch学习神经网络的搭建
    CentOS7 —— yum安装mysql
    leetcode做题笔记204. 计数质数
    Matlab算法模版(一)——模拟退火和灰色预测
    Linux进程替换
    librispeech 的train-clean-100--简单记录笔记
    ros2与windows入门教程-windows上安装ROS2 foxy
    【UE5 虚幻引擎】新建C++类:类的类型 命名 类的目标模块
    Android BottomNavigation底部导航栏使用
    记一次 Java Testcontainers CPU 100% 问题排查过程
  • 原文地址:https://blog.csdn.net/m0_52433668/article/details/126180243