C语言:break、continue、猜拳游戏

发布于:2025-07-23 ⋅ 阅读:(17) ⋅ 点赞:(0)

Day 7-C语言

流程控制

break与continue

break

功能:

①用在switch中,用来跳出case语句;无break,switch会执行多条语句,case穿透

②在循环中(while…,for…,do…while),提前结束循环

说明:

①break不能用于循环语句和switch语句之外的任何其他语句中

②break只能终止并跳出最近的一层循环结构

案例
  • 需求:参与考试,及格跳出循环,否则一直考
  • 代码
#include <stdio.h>

int main(int argc,char *argv[])
{
    printf("|--考试--|\n");

    //创建变量,存储成绩
    int score;

    //创建循环,实现重复考试
    do
    {
        printf("考试开始…\n");
        scanf("%d",&score);

        //考试及格,终止循环
        if (score >= 60) break; //break执行后,下面这条语句不执行

        printf("很遗憾,没有及格,再考一次!\n");
    }
    while(1); //可控死循环

    printf("考试及格,结束!\n");

    return 0;
}
continue

功能:continue语句不会结束整个循环,而是跳过本次循环,进入下一次循环

说明:

①仅用于循环语句中

②在嵌套循环中,continue语句只能跳出最近的一层循环结构,即单层循环

案例:

  • 需求:1~100内的偶数和
  • 代码
#include <stdio.h>

int main(int argc,char *argv[])
{
    int sum=0;

    for(int i=2;i <= 100;i++)
    {
        //跳过奇数
        if(i % 2 != 0) continue;//执行了continue后,下面一条语句不执行

        sum += i;
    }

    printf("1~100内的偶数和为%d\n",sum);

    return 0;
}
跳出嵌套循环(扩展)

说明:不可用break和continue,因为二者只可用于单层循环。可以自定义标志位跳出(标志位可搭配break使用)

案例:

#include <stdio.h>

int test_1()
{
    int flag=1;    
    
    char op;
    
    while(flag)
    {
        printf("1外层循环\n");

        
        while(flag)
        {
            printf("1内层循环\n");
            
            scanf("%c",&op);

            if(op == 'Y' || op == 'y')
                flag = 0;
        }
            
    }
}


int test_2()
{
    int flag=1;    
    
    char op;
    
    while(flag)
    {
        printf("2外层循环\n");

        
        while(1)
        {
            printf("2内层循环\n");
            
            scanf("%c",&op);

            if(op == 'Y' || op == 'y')
            {
                flag = 0;
                break;
            }
            
        }
            
    }
}

int main(int argc,char *argv[])
{
    
    test_1();
    test_2();

	return 0;
}

注意:如果是多层循环(嵌套循环),进的时候是从外到内,跳出的时候是从内到外。

综合案例《猜拳游戏》

  • 需求

    • 单机游戏,人机交互
  • 规则:

    • 需要双方出拳:石头、剪刀、布
    • 赢:
      • 石头 → 剪刀
      • 剪刀 → 布
      • 布 → 石头
    • 平:
      • 两边出拳相等
    • 输:
  • 实现:

    • 选择对手
    • 玩家出拳
    • 对手出拳
    • 判断胜负
    • 游戏退出
  • 代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc,char *argv[])
{

  //初始化随机种子
  srand((unsigned)time(NULL));

  //游戏主控循环,变量等于1,可重复玩
  int game = 1;
  

  //游戏头设置
  printf("================\n");
  printf("|=  猜拳游戏  =|\n");
  printf("|= 作者:fjyy =|\n");
  printf("================\n");


  //主循环
  while(game)
  {
      //1.选择对手
      //创建变量,存储对手序号
      int peopnum;
      printf("\n|==选择对手==|\n");
      while(1)
      {
          printf("[1]小明  [2]小文  [3]小云\n");
          //处理非法输入
          if(scanf("%d",&peopnum) == 0)
          {
              //清空输入缓冲区非法字符
              while(getchar() != '\n');
              printf("请输入数字!\n");
              continue;
          }
          //验证输入范围
          if(peopnum >= 1 || peopnum <= 3 ) break;
          printf("无效,请重新输入");
      }
      //显示对手信息,const修饰变量,变量不能再次改变
      const char *peopnum_name = peopnum==1 ? "小明" : peopnum ==2 ? "小文" : "小云";
      printf("您已选择对手:%s\n",peopnum_name);


      //2.玩家出拳
      //创建一个变量,存储玩家自己的出拳序号
      int player_part;

      printf("\n|==请您出拳==|\n");

      while(1)
      {
          printf("[1]石头  [2]剪刀  [3]布\n");

          //非法校验
          if(scanf("%d",&player_part) == 0)
          {
              while(getchar() != '\n');
              printf("请输入数字!\n");
              continue;
          }
          //验证输入范围
          if(player_part >= 1 || player_part<= 3 ) break;
          printf("无效,请重新输入");
              //清空缓冲区字符
      }
      //显示玩家出拳信息
      const char* player_part_name=player_part ==1 ? "石头" : player_part==2 ? "剪刀" : "布";
      printf("您出了%s\n",player_part_name);

      //3.PC出拳
      printf("\n|==对手出拳==|\n");
      //pc随机出数字0~2,+1,为1~3
      int computer_part = rand() % 3 + 1; 
      //pc出拳
      const char *computer_part_name=computer_part==1 ? "石头":computer_part==2 ? "剪刀" : "布";
      printf("%s出%s\n",peopnum_name,computer_part_name);

      //判断胜负
      printf("\n|==判断胜负==|\n");
      int result =(player_part - computer_part + 3) % 3;
      if(result == 2) printf("恭喜您,获得胜利!\n");
      else if (result == 0) printf("打成平局!\n");
      else printf("很遗憾,您失败了!");

      //游戏退出
      printf("\n|==是否继续==|\n");
      printf("\n是否继续游戏?[Y/N]");

      //清除缓冲区
      while(getchar() != '\n');

      //检测控制台输入(字符串),等价于scanf
      char quit = getchar();
      game=quit=='Y' || quit=='y' ? 1 : 0;
  }
  printf("\n退出游戏!\n");

  return 0;
}

  

这里的综合案例,大家可以多练习一下


网站公告

今日签到

点亮在社区的每一天
去签到