鱼C论坛

 找回密码
 立即注册
查看: 1550|回复: 10

选择结构

[复制链接]
发表于 2020-7-10 21:35:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. main ()
  2. {
  3.         int i;
  4.         for(i=0; i<3; i++)
  5.         switch(i)
  6.         {
  7.                 case 0;printf("%d",i);
  8.                 case 2;printf("%d",i);
  9.                 default:printf("%d",i);
  10.                  
  11.         }
  12. }
复制代码



输出结果为什么是000122?
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-11 10:48:12 | 显示全部楼层
首先,应该是"%d\n",不然无法换行
其次,case后应该跟冒号:而不是分号;
然后,每一个case后都应该有break
这样优化过的代码如下:
  1. switch(i)
  2.         {
  3.                 case 0:printf("%d\n",i);break;
  4.                 case 2:printf("%d\n",i);break;
  5.                 default:printf("%d\n",i);
  6.                  
  7.         }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-11 13:39:55 | 显示全部楼层
因为每一个case语句里没有break;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-12 10:53:12 | 显示全部楼层
case后跟“:”,switch-case在for循环里
i=0时,执行case0,再执行case2,最后执行default
i=1时,执行default
i=2时,执行case2,最后执行default
i=3时,退出循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-7-12 20:23:30 | 显示全部楼层
你没有break。case0,运行后会继续下面所有代码。所以i=0,会case0,case2,和default三个全部运行。等于1,就会default,在最下面,运行完了就没有了,所以只有一个1。而等于2时,从case2开始,所以有两个2
而且case0后面要冒号,你是分号。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-28 09:26:55 | 显示全部楼层
case语句中,不break,会从当前语句执行到最后再跳出,所以在i=0时执行三次,i=1时执行一次,i=2时执行了两次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-31 21:41:36 | 显示全部楼层
case语句没有break是不会跳出的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 15:26:37 | 显示全部楼层
正常,你case 0:后是分号,此处应是冒号,而且应该有break。否则就算你是是冒号,那么根据意思,也是先打三个0,再打一个1,因为1在default中,0和2不符事。然后打两个2。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 17:36:09 | 显示全部楼层
本帖最后由 风过无痕1989 于 2020-8-4 17:39 编辑
  1. main ()
  2. {
  3.         int i;
  4.         for(i=0; i<3; i++)
  5.         switch(i)
  6.         {
  7.         case 0;printf("%d",i);break;
  8.         case 2;printf("%d",i);break;
  9.         default:printf("%d",i);
  10.                  
  11.         }
  12. }
复制代码


      switch() 只是一个开关,不负责判断,若没有 break ,执行完应该执行的那一条语句后,程序会顺序往下执行,这样,你得到的结果永远都是最后那一句语句的执行结果,并非你想要的结果,这就是出错的原因

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-4 17:50:40 | 显示全部楼层
本帖最后由 风过无痕1989 于 2020-8-4 17:53 编辑

你的程序错处比较多,就不修改我上面发的了,在此重发正确的:

  1. #include<stdio.h>

  2. main ()
  3. {
  4.         int i;
  5.                 scanf("%d",&i);
  6.         for(i=0; i<3; i++)
  7.         switch(i)
  8.         {
  9.         case 0:
  10.                 {
  11.                     printf("%d",i);
  12.                     break;
  13.                 }
  14.         case 1:
  15.                 {
  16.                     printf("%d",i);
  17.                     break;
  18.                 }
  19.         case 2:
  20.                 {
  21.                     printf("%d",i);
  22.                     break;
  23.                 }
  24.         default:printf("%d",i);
  25.                  
  26.         }
  27. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-7 12:36:30 | 显示全部楼层
switch语句一般与break和default连用,如果没有每个语句后面没有break,那么输入数从符合条件的语句开始执行,下面的也会依次执行,当i=0时,第一个语句就符合,第一个字输出0,下面语句也执行所以第一次循环000,第二次循环i=1,第一个语句和第二个语句不满足条件,当没有符合条件的语句且存在dafault标号适合,执行dafault后面的语句,第二次循环输出1,然后输入2进去,从第二语句符合条件,所以第三次循环22,i=3不符合条件跳出swtich循环语句,所以是000122
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-11 03:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表