多项选择题:以下代码的结果是什么?
int x=0;
switch(x)
{
case 1: printf( "One" );
case 0: printf( "Zero" );
case 2: printf( "Hello World" );
}
选项:
One
Zero
Hello World
ZeroHello World
我以为它只会返回Zero
。我玩过int值是什么,它改变了输出但是我无法跟踪这里发生的事情。
答案 0 :(得分:6)
这是4,ZeroHelloWorld
。这是因为你没有休息。发生的事情是你的代码(正确)到达案例0并执行该代码。但接下来会发生什么呢?它继续发展(因此是Hello World)。为了防止这种情况,您需要使用break语句,如此 -
int x=0;
switch(x){
case 1:
printf("One");
break;
case 0:
printf("Zero");
break;
case 2:
printf("Hello World");
break;
}
这实际上只是说零。
如果将x设置为1,则可以更清楚地看到问题。然后您将打印出OneZeroHello World
。
答案 1 :(得分:4)
只是详细说明以前的答案。
在C(及其他版本)中,switch语句中的个案用作标签。根据x的值,它将转到正确的case语句,但是它将通过下面的每个其他case语句,除非你有一个'break'语句。
除此之外,最好同时使用默认值,这样如果X的值不是0,1或2,则行为仍然是可预测的。我想这意味着你的代码看起来像,
int x=0;
switch(x)
{
case 1: printf( "One" );
break;
case 0: printf( "Zero" );
break;
case 2: printf( "Hello World" );
break;
default: printf("X is out of range, it was %d\n", x);
}
默认情况下你不需要break语句,因为无论如何它都是最后一个。
查看here的语法。
希望这有帮助,
答案 2 :(得分:2)
在C case语句中“掉头”,即case语句将在第一个真实条件下开始执行并继续使用case语句的结尾或遇到“exit”。
您需要明确退出。
int x=0;
switch(x)
{
case 1: printf( "One" );
break;
case 0: printf( "Zero" );
break;
case 2: printf( "Hello World" );
}
答案 3 :(得分:2)
case
标签仅确定交换机中的哪一点开始执行代码。输入开关后,除非有break
,否则代码执行将“流过”并继续执行。
因此,在case 0:
处输入切换,并打印Zero
。由于没有break
,因此也会执行下一个语句,您的输出将为ZeroHello World
如果您只想要Zero
作为输出,则需要:
int x=0;
switch(x)
{
case 1: printf( "One" );
break; // note the "break"
case 0: printf( "Zero" );
break;
case 2: printf( "Hello World" );
break;
}
break
会导致执行在printf("Zero");
之后停止并退出开关。
答案 4 :(得分:1)
结果是4。 实际上,switch(x)中的x只表示执行的“起始点”。你需要“休息”来打破执行。 因此,在没有中断的情况下,交换机将开始执行来自case x的语句,直到它执行以下所有情况。