多选题:以下代码的结果是什么?
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值是什么,它改变了输出,但我无法理解这里发生了什么。
它是4,ZeroHelloWorld
。这是因为你没有休息。所发生的情况是,您的代码(正确地)到达案例0并执行该代码。但接下来发生的是它一直在继续(因此产生了Hello World)。为了防止这种情况,你需要使用一个break语句,比如so-
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
。
只是详细说明前面的答案。
在C语言(以及它的其他风格)中,switch语句中的case被用作标签。根据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 %dn", x);
}
默认情况下不需要break语句,因为它是最后一个。
在这里查找语法。
希望这有帮助,
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");
之后停止,并将退出开关。
在C中,case语句"失败",即case语句将在第一个true条件下开始执行,并一直持续到case语句结束或遇到"退出"。
你需要像这样明确地退出。
int x=0;
switch(x)
{
case 1: printf( "One" );
break;
case 0: printf( "Zero" );
break;
case 2: printf( "Hello World" );
}
结果为4。实际上,开关(x)中的x只是指示执行的"起点"。你需要"中断"来中断执行。因此,在不中断的情况下,开关将从案例x开始执行语句,直到执行以下所有案例。