循环的应用--猜数字游戏、关机程序【c语言篇】

简介: 循环的应用--猜数字游戏、关机程序【c语言篇】

猜数字游戏

1.游戏介绍

1.程序会生成一个1~100的随机数

2.猜数字(猜错会有提示)

3.支持反复玩


2.实现思路及步骤分析

我会一步步地进行讲解并修改:

1.main()主函数:游戏的基本轮廓

2.menu()函数:游戏的基本菜单

3.game()函数:猜数字的整个逻辑


(1)main()函数:

这里我们用到了do while循环和switch循环,首先自己输入得到一个变量input的值,根据输入的值来判断游戏是否进行,输入为1则游戏开始,输入为0则退出游戏,输入0或1以外的值则提示重新输入,这样一个简单的逻辑就形成了。注意:这个游戏是支持反复玩的,在执行do while()语句时,while()内的参数应该是我们自己输入的值,只要input的值不为0,循环就会一直进行。

int main()
{
  int input = 0;
  do
  {
    menu();
    printf("请选择:>");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
      game();//game()函数是猜数字的整个逻辑
      break;
    case 0:
      printf("退出游戏\n");
      break;
    default:
      printf("输入错误,请重新输入!\n");
      break;
    }
  } while (input);
  return 0;
}

(2)menu()函数:

menu()函数其实就是打印一个简单的菜单:

void menu()
{
  printf("************************\n");
  printf("*******  1.play  *******\n");
  printf("*******  0.exit  *******\n");
  printf("************************\n");
}

最基本的逻辑已经好了,此时我们可以先打印出菜单来瞄一眼

是不是有点意思了,接下来我们进行猜数字游戏的逻辑分析


(3)game()函数:

简单的分为两个步骤:

1.生成随机数

2.猜数字

首先,我们要想生成随机数,还需要了解三个函数,rand()、srand()、time()

*rand():

int rand (void);这是rand()的使用规范,它的头文件为#include

rand()函数是专门用来生成随机数的,它返回的是0~RAND_MAX之间的整数,根据定义,RAND_MAX被>定义为十六进制的0X7fff,转换为十进制就是32767,所以rand(0函数返回的范围是0-32767,

注意:rand()函数并不是单独使用的,在使用rand()函数之前需要使用srand(0函数设置随机数的生成器。

**srand():

void srand (unsigned int seed);这是srand()的使用规范,它的头文件为#include

srand()无返回值,但它的参数是一个整型的随机值(变化的值),说到这里,怎么感觉好像有点矛盾了,我们就是要生成随机值的,现在这个函数的参数就是随机值,那这样我们写这个函数的意义是什么呢?

其实不然,srand()的参数只要是变化的就行,这时我们注意到时间是在不断变化的,我们可以拿一个时间戳来作为srand()的参数。

***time():

time_t time (time_t* timer);这是time()的使用规范,它的头文件为#include

time()返回的就是一个时间戳,它的返回类型time_t其实也是一个长的整型,注意到它的参数是一个指针类型的,我们使用时可以将NULL(空类型的指针)作为它的参数,这时我们就可以用time()的返回值来作为srand()的参数。

由于srand函数在程序中只要调用一次就可以了,不需要频繁调用,所以我们将srand()函数放在main()函数中,game()可以被循环调用,而srand()只调用了一次,此时被修改后的main()代码如下:

int main()
{
  int input = 0;
  srand((unsigned int)time(NULL));//随机数生成器
  do
  {
    menu();
    printf("请选择:>");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
      game();//game()函数是猜数字的整个逻辑
      break;
    case 0:
      printf("退出游戏\n");
      break;
    default:
      printf("输入错误,请重新输入!\n");
      break;
    }
  } while (input);
  return 0;
}

我们要生成的随机数的范围是1~100,这时我们可以想到,任何数除以100后余数绝对不会超过100,所以通过rand()%100+1就可以得到我们想要的效果。

代码如下:

我们有了随机数,只需要将我们猜的数字与随机数进行比较,通过if-else if-else分支进行比较并提示,猜错了需要重新猜,把这分支语句嵌入到while循环中,while循环条件恒为真,只有当猜对后,才通过break跳出循环。

void game()
{
  int num = 0;
  //1.生成随机数
  int ret = rand() % 100 + 1;
  //2.猜数字
  while (1)
  {
    printf("请猜数字:>");
    scanf("%d", &num);
    if (num > ret)
    {
      printf("猜大了\n");
    }
    else if (num < ret)
    {
      printf("猜小了\n");
    }
    else
    {
      printf("恭喜你,猜对了!\n");
      break;
    }
  }
}

完整的代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//打印菜单
void menu()
{
  printf("************************\n");
  printf("*******  1.play  *******\n");
  printf("*******  0.exit  *******\n");
  printf("************************\n");
}
//猜数字的逻辑
void game()
{
  int num = 0;
  //1.生成随机数
  int ret = rand() % 100 + 1;//任何数除以100的余数都是0~99,加1后为1~100
  //2.猜数字
  while (1)
  {
    printf("请猜数字:>");
    scanf("%d", &num);
    if (num > ret)
    {
      printf("猜大了\n");
    }
    else if (num < ret)
    {
      printf("猜小了\n");
    }
    else
    {
      printf("恭喜你,猜对了!\n");
      break;
    }
  }
}
int main()
{
  int input = 0;
  srand((unsigned int)time(NULL));
  do
  {
    menu();
    printf("请选择:>");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
      game();//game()函数是猜数字的整个逻辑
      break;
    case 0:
      printf("退出游戏\n");
      break;
    default:
      printf("输入错误,请重新输入!\n");
      break;
    }
  } while (input);
  return 0;
}

3.游戏完成

接下来我来玩一局试试,结果如下图:

这样我们的猜数字游戏就完成了。

关机程序

1.程序介绍

程序执行起来就倒计时(60s)关机

如果输入:dad,就取消关机

2.程序实现思路

要想使电脑关机,我们需要学习一个命令,shutdown是一个命令,设置关机:-s,设置时间:-t 60,关机的整个命令为shutdown -s -t 60,取消关机为shutdown -a。

代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
  char input[20] = { 0 };
again:
  system("shutdown -s -t 60");
  printf("注意你的电脑将在1分钟内关机,若输入:dad,就取消关机\n");
  scanf("%s", input);//字符串名字就是首地址
  //判断
  if (0 == strcmp(input, "dad"))
  {
    printf("dad马上关机,haha\n");
    system("shutdown -a");
  }
  else
  {
    goto again;
  }
  return 0;
}

3.运行结果


相关文章
|
7天前
|
C语言
【C语言基础】:分支与循环
【C语言基础】:分支与循环
|
15天前
|
编译器 C语言 C++
C语言学习记录——位段(内存分配、位段的跨平台、位段的应用)
C语言学习记录——位段(内存分配、位段的跨平台、位段的应用)
15 0
|
6天前
|
机器学习/深度学习 算法 C语言
详细介绍递归算法在 C 语言中的应用,包括递归的基本概念、特点、实现方法以及实际应用案例
【6月更文挑战第15天】递归算法在C语言中是强大力量的体现,通过函数调用自身解决复杂问题。递归涉及基本概念如自调用、终止条件及栈空间管理。在C中实现递归需定义递归函数,分解问题并设定停止条件。阶乘和斐波那契数列是经典应用示例,展示了递归的优雅与效率。然而,递归可能导致栈溢出,需注意优化。学习递归深化了对“分而治之”策略的理解。**
20 7
|
8天前
|
C语言
️️【C语言-游戏设置】---猜数字游戏1~100
️️【C语言-游戏设置】---猜数字游戏1~100
|
15天前
|
C语言
c语言循环题目
c语言循环题目
|
15天前
|
存储 算法 安全
数据结构学习记录——图应用实例-拯救007(问题描述、解题思路、伪代码解读、C语言算法实现)
数据结构学习记录——图应用实例-拯救007(问题描述、解题思路、伪代码解读、C语言算法实现)
16 0
|
15天前
|
程序员 C语言 C++
C语言学习记录——动态内存习题(经典的笔试题)、C/C++中程序内存区域划分
C语言学习记录——动态内存习题(经典的笔试题)、C/C++中程序内存区域划分
19 0
|
16天前
|
C语言
C语言——oj刷题——猜数字游戏
C语言——oj刷题——猜数字游戏
|
16天前
|
C语言
C语言函数递归详解:理解递归的原理与应用
C语言函数递归详解:理解递归的原理与应用
13 0
|
16天前
|
C语言
C语言控制流程详解:分支与循环语句
C语言控制流程详解:分支与循环语句
12 0