yihayoooooo 发表于 2020-7-10 21:35:17

选择结构

main ()
{
        int i;
        for(i=0; i<3; i++)
        switch(i)
        {
                case 0;printf("%d",i);
                case 2;printf("%d",i);
                default:printf("%d",i);
               
        }
}


输出结果为什么是000122?
谢谢

lhgzbxhz 发表于 2020-7-11 10:48:12

首先,应该是"%d\n",不然无法换行
其次,case后应该跟冒号:而不是分号;
然后,每一个case后都应该有break
这样优化过的代码如下:
switch(i)
      {
                case 0:printf("%d\n",i);break;
                case 2:printf("%d\n",i);break;
                default:printf("%d\n",i);
               
      }

chxchxkkk 发表于 2020-7-11 13:39:55

因为每一个case语句里没有break;

巴巴鲁 发表于 2020-7-12 10:53:12

case后跟“:”,switch-case在for循环里
i=0时,执行case0,再执行case2,最后执行default
i=1时,执行default
i=2时,执行case2,最后执行default
i=3时,退出循环

405794672 发表于 2020-7-12 20:23:30

你没有break。case0,运行后会继续下面所有代码。所以i=0,会case0,case2,和default三个全部运行。等于1,就会default,在最下面,运行完了就没有了,所以只有一个1。而等于2时,从case2开始,所以有两个2
而且case0后面要冒号,你是分号。。。。

昨非 发表于 2020-7-28 09:26:55

case语句中,不break,会从当前语句执行到最后再跳出,所以在i=0时执行三次,i=1时执行一次,i=2时执行了两次

临时号 发表于 2020-7-31 21:41:36

case语句没有break是不会跳出的

405794672 发表于 2020-8-4 15:26:37

正常,你case 0:后是分号,此处应是冒号,而且应该有break。否则就算你是是冒号,那么根据意思,也是先打三个0,再打一个1,因为1在default中,0和2不符事。然后打两个2。

风过无痕1989 发表于 2020-8-4 17:36:09

本帖最后由 风过无痕1989 于 2020-8-4 17:39 编辑

main ()
{
      int i;
      for(i=0; i<3; i++)
      switch(i)
      {
      case 0;printf("%d",i);break;
      case 2;printf("%d",i);break;
      default:printf("%d",i);
               
      }
}


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

风过无痕1989 发表于 2020-8-4 17:50:40

本帖最后由 风过无痕1989 于 2020-8-4 17:53 编辑

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

#include<stdio.h>

main ()
{
      int i;
                scanf("%d",&i);
      for(i=0; i<3; i++)
      switch(i)
      {
      case 0:
                {
                  printf("%d",i);
                  break;
                }
      case 1:
                {
                  printf("%d",i);
                  break;
                }
      case 2:
                {
                  printf("%d",i);
                  break;
                }
      default:printf("%d",i);
               
      }
}

崔铭1315 发表于 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
页: [1]
查看完整版本: 选择结构