选择结构
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?
谢谢 首先,应该是"%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);
} 因为每一个case语句里没有break; case后跟“:”,switch-case在for循环里
i=0时,执行case0,再执行case2,最后执行default
i=1时,执行default
i=2时,执行case2,最后执行default
i=3时,退出循环 你没有break。case0,运行后会继续下面所有代码。所以i=0,会case0,case2,和default三个全部运行。等于1,就会default,在最下面,运行完了就没有了,所以只有一个1。而等于2时,从case2开始,所以有两个2
而且case0后面要冒号,你是分号。。。。 case语句中,不break,会从当前语句执行到最后再跳出,所以在i=0时执行三次,i=1时执行一次,i=2时执行了两次 case语句没有break是不会跳出的 正常,你case 0:后是分号,此处应是冒号,而且应该有break。否则就算你是是冒号,那么根据意思,也是先打三个0,再打一个1,因为1在default中,0和2不符事。然后打两个2。 本帖最后由 风过无痕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: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);
}
} switch语句一般与break和default连用,如果没有每个语句后面没有break,那么输入数从符合条件的语句开始执行,下面的也会依次执行,当i=0时,第一个语句就符合,第一个字输出0,下面语句也执行所以第一次循环000,第二次循环i=1,第一个语句和第二个语句不满足条件,当没有符合条件的语句且存在dafault标号适合,执行dafault后面的语句,第二次循环输出1,然后输入2进去,从第二语句符合条件,所以第三次循环22,i=3不符合条件跳出swtich循环语句,所以是000122
页:
[1]