评论

收藏

[C++] c语言_Day13_07_12

编程语言 编程语言 发布于:2021-07-13 10:32 | 阅读数:227 | 评论:0

c语言_Day13_07_12

1、猜数字游戏

  需求:1、生成随机数,用户猜测数字,电脑反馈用户所猜数字大或小或准确
  ​            2、菜单界面
  我的代码:
int main()
{
  int tarNum = rand();
  int inputNum;
  int playAgain = 'Y';
  printf("欢迎游玩猜数字小游戏\n============================\n");
  while (playAgain == 'Y')
  {
    printf("请输入数字: ");
    scanf("%d", &inputNum);
    if (inputNum == tarNum)
    {
      printf("已猜到,随机数就是%d\n", inputNum);
      while (1)
      {
        printf("是否还要继续游玩?(Y/N)\n");
        while (getchar() != '\n') {}
        scanf("%c", &playAgain);
        if (playAgain == 'Y')
        {
          tarNum = rand();
          break;
        }
        else if (playAgain == 'N')
        {
          printf("游戏结束\n");
          break;
        }
        else
        {
          printf("输入错误,请再次输入\n");
        }
      }
    }
    else if (inputNum > tarNum)
    {
      printf("输入的数字较大\n");
    }
    else
    {
      printf("输入的数字较小\n");
    }
  }
  return 0;
}
  问题:

  • 随机数为伪随机数,应当通过srand函数初始化随机数。然而,srand函数需要接收一个随机整数作为参数,可传入一个时间戳作为参数(使用time函数)

  • 随机数范围太大,若需生成a~b之间的随机数,则可带入公式
  >rand() % a + b

  • 可以考虑将不同功能的代码封装至不同的函数中调用,逻辑会更清晰
  参考代码:
/// <summary>
/// 生成菜单页面
/// </summary>
void menu()
{
  printf("***********************\n");
  printf("****1.play   0.exit****\n");
  printf("***********************\n");
}
/// <summary>
/// 生成1-100之间的随机数
/// </summary>
/// <returns></returns>
int getRandNum()
{
  return rand() % 100 + 1;
}
/// <summary>
/// 进行猜数字游戏
/// </summary>
void game()
{
  int gusNum = 0;
  // 1. 生成随机数
  int randNum = getRandNum();
  // 2. 猜数字
  while (1)
  {
    printf("请猜数字:");
    scanf("%d", &gusNum);
    if (gusNum > randNum)
    {
      printf("大了\n");
    }
    else if (gusNum < randNum)
    {
      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 0:
      printf("退出游戏\n");
      break;
    case 1:
      // 进行游戏
      game();
      break;
    default:
      printf("输入错误\n");
      break;
    }
  } while (input);
  return 0;
}
  
2、goto语句


  goto语句由两部分构成:goto和标签名
  goto可跳转至标签名所对应的语句处
int main()
{
again:
  printf("Hello, World!");
  goto again;
  return 0;
}
  注:goto语句容易被滥用,导致程序执行顺序混乱
  特殊的应用场景:跳出深层嵌套的循环
int main()
{
  for (int i = 0; i < 100; i++)
  {
    for (int k = 0; k < 10; k++)
    {
      if (i == 50)
      {
        goto out;
      }
      else
      {
        printf("%d -- %d\n", k, i);
      }
    }
  }
out:
  printf("I'm out\n");
  return 0;
}
  例:关机程序
// 关机程序
int main()
{
  char input[20] = { 0 };
  system("shutdown -s -t 60");
again:
  printf("您的电脑将在60s后关机!\n输入'stop'停止关机\n");
  scanf("%s", input);
  if (strcmp(input, "stop") == 0)
  {
    system("shutdown -a");
    printf("已关闭定时\n");
  }
  else
  {
    goto again;
  }
  return 0;
}
  实际上改代码的goto语句部分可使用while语句替代:
while(1)
{
  printf("您的电脑将在60s后关机!\n输入'stop'停止关机\n");
  scanf("%s", input);
  if (strcmp(input, "stop") == 0)
  {
    system("shutdown -a");
    printf("已关闭定时\n");
    break;
  }
}
关注下面的标签,发现更多相似文章