分支和循环语句(3)

简介: 分支和循环语句(3)


3.4.6 猜数字游戏
  1. 打印菜单
void menu()
{
  printf("***************************\n");
  printf("***** 1.play   0.exit *****\n");
  printf("***************************\n");
}

  1. 选择玩游戏或退出游戏
int main()
{
  //打印菜单
  //1. 玩游戏
  //0. 退出游戏
  int input = 0;
  do
  {
    menu();
    printf("请选择:>");
    scanf("%d", &input);//1 0
    switch (input)
    {
    case 1:
      game();
      break;
    case 0:
      printf("退出游戏\n");
      break;
    default:
      printf("选择错误\n");
      break;
    }
  } while (input);
  return 0;
}

  1. 猜数字游戏主体
//void srand (unsigned int seed);
void game()
{
  //RAND_MAX;
  
  //1. 生成随机数
  int ret = rand()%100+1;//可以生成随机数,随机数的范围是:0~32767
  //1~100
  //printf("%d\n", ret);
  //2. 猜数字
  int guess = 0;
  
  while (1)
  {
    printf("请猜数字:>");
    scanf("%d", &guess);
    if (guess > ret)
    {
      printf("猜大了\n");
    }
    else if (guess < ret)
    {
      printf("猜小了\n");
    }
    else
    {
      printf("恭喜你,猜对了\n");
      break;
    }
  }
}
int main()
{
  //time函数可以返回一个时间戳
  srand((unsigned int)time(NULL));//要给srand传递一个变化的值,计算机上的时间是时刻发生变化的
  
  return 0;
}

完整代码:

#include <stdio.h>
#include <stdlib.h>//rand和srand需要一个stdlib.h的头文件
#include <time.h>
void menu()
{
  printf("***************************\n");
  printf("***** 1.play   0.exit *****\n");
  printf("***************************\n");
}
//void srand (unsigned int seed);
void game()
{
  //RAND_MAX;
  
  //1. 生成随机数
  int ret = rand()%100+1;//可以生成随机数,随机数的范围是:0~32767
  //1~100
  //printf("%d\n", ret);
  //2. 猜数字
  int guess = 0;
  
  while (1)
  {
    printf("请猜数字:>");
    scanf("%d", &guess);
    if (guess > ret)
    {
      printf("猜大了\n");
    }
    else if (guess < ret)
    {
      printf("猜小了\n");
    }
    else
    {
      printf("恭喜你,猜对了\n");
      break;
    }
  }
}
int main()
{
  //打印菜单
  //1. 玩游戏
  //0. 退出游戏
  int input = 0;
  //time函数可以返回一个时间戳
  srand((unsigned int)time(NULL));//要给srand传递一个变化的值,计算机上的时间是时刻发生变化的
  do
  {
    menu();
    printf("请选择:>");
    scanf("%d", &input);//1 0
    switch (input)
    {
    case 1:
      game();
      break;
    case 0:
      printf("退出游戏\n");
      break;
    default:
      printf("选择错误\n");
      break;
    }
  } while (input);
  return 0;
}

4. goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。

#include <stdio.h>
int main()
{
again:
  printf("hehe\n");
  printf("hehe\n");
  printf("hehe\n");
  printf("hehe\n");
  
  goto again;//可以向前跳,也可以向后跳
//end:
  return 0;
}

注:

#include <stdio.h>
void test()
{
flag:
  printf("test\n");
}
int main()
{
  printf("hehe\n");
  
  goto flag;//goto 语句只能一个函数内部跳转,不能跨函数跳转的
  return 0;
}

从理论上, goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。

//关机程序 
//1. 程序运行起来后,1分钟内电脑关机
//2. 如果输入:我是猪,就取消关机
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
  char input[20] = { 0 };
  //程序倒计时关机
  system("shutdown -s -t 60");
again:
  printf("请注意,你的电脑在1分钟内关机,如果输入:我是猪,就取消关机\n");
  scanf("%s", input);//输入
  
  if (0 == strcmp(input, "我是猪"))
  {
    system("shutdown -a");
  }
  else
  {
    goto again;
  }
  return 0;
}

//不用goto语句
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
  char input[20] = { 0 };
  //程序倒计时关机
  system("shutdown -s -t 60");
  while (1)
  {
    printf("请注意,你的电脑在1分钟内关机,如果输入:我是猪,就取消关机\n");
    scanf("%s", input);//输入
    if (0 == strcmp(input, "我是猪"))
    {
      system("shutdown -a");
      break;
    }
  }
  return 0;
}

附:关于shutdown命令的扩展


但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。例如:一次跳出两层或多层循环。多层循环这种情况使用break是达不到目的的,它只能从最内层循环退出到上一层的循环。


目录
相关文章
|
IDE Java 测试技术
Mockito 应用指南
Mockito 是一个针对 Java 的 mock 框架。
325 0
|
资源调度
yarn 错误:There appears to be trouble with your network connection. Retrying…
yarn 错误:There appears to be trouble with your network connection. Retrying…
1685 0
|
9月前
|
编解码 安全 数据挖掘
《移动应用上线前的关键大考:用户验收测试深度解析》
用户验收测试是移动应用开发中的关键环节,贯穿从需求分析到最终优化的全过程。它不仅是对功能的检验,更是从用户真实需求和体验出发,全面审视应用价值的核心步骤。通过明确测试目标、多方协作、梳理业务流程、设计测试用例及模拟真实场景,确保应用在复杂环境中稳定可靠。严谨执行测试、深入数据分析与清晰报告编写,为应用优化提供依据。最终,通过有效沟通推动持续改进,使应用在竞争中脱颖而出,赢得用户信赖。这是连接开发者与用户的桥梁,助力打造卓越产品。
279 12
|
11月前
|
机器学习/深度学习 数据采集 人工智能
CCF 乌鲁木齐会员沙龙(第10期)——CCF 会员与分部工委李贝主任讲座
2025年3月4日,CCF乌鲁木齐会员沙龙第10期在新疆大学举办。活动由CCF主办,汇聚专家、师生及行业代表逾400人。李贝主任以“人工智能时代的红利——CCF”为主题演讲,探讨AI技术发展及其对教育与边疆数字化建设的影响。钱育蓉教授致开幕辞,强调培养新一代计算机人才的重要性。互动环节热烈,活动在掌声中圆满落幕,推动学术与产业深度融合。阿里云支持AI时代高校人才培养和科研创新,提供免费算力资源。
|
存储 Go 开发者
Go语言中的并发编程与通道(Channel)的深度探索
本文旨在深入探讨Go语言中并发编程的核心概念和实践,特别是通道(Channel)的使用。通过分析Goroutines和Channels的基本工作原理,我们将了解如何在Go语言中高效地实现并行任务处理。本文不仅介绍了基础语法和用法,还深入讨论了高级特性如缓冲通道、选择性接收以及超时控制等,旨在为读者提供一个全面的并发编程视角。
328 50
|
机器学习/深度学习 人工智能 自然语言处理
|
存储 缓存 网络安全
南大通用GBase 8s 数据库 RHAC集群基本原理和搭建步骤
南大通用GBase 8s 数据库 RHAC集群基本原理和搭建步骤
|
缓存 测试技术 Apache
ab 压测工具:评估你的服务器性能
ApacheBench (AB) 是一款用于 HTTP 性能测试的轻量级工具,可模拟多用户并发访问,评估应用在高负载下的表现。通过命令行参数 `-n` 和 `-c` 分别设置总请求数和并发数,例如 `ab -n 100 -c 2 http://larablog.test/`。
680 1
|
Prometheus Cloud Native Go
Golang语言之Prometheus的日志模块使用案例
这篇文章是关于如何在Golang语言项目中使用Prometheus的日志模块的案例,包括源代码编写、编译和测试步骤。
318 4
Golang语言之Prometheus的日志模块使用案例
|
消息中间件 缓存 Dubbo
java线程池ThreadPoolExecutor八种拒绝策略浅析
java线程池ThreadPoolExecutor八种拒绝策略浅析
545 0

热门文章

最新文章