多选题:以下代码的结果是什么?
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 值是什么,它改变了输出,但我无法理解这里发生的事情。
多选题:以下代码的结果是什么?
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 语句,如下所示 -
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 %d\n", x);
}
您不需要默认的 break 语句,因为无论如何它是最后一个。
在此处查找语法。
希望这可以帮助,
在 C 语言中,case 语句“失败”,即 case 语句将在第一个 true 条件下开始执行,并在 case 语句结束或遇到“exit”之前继续。
您需要像这样显式退出。
int x=0;
switch(x)
{
case 1: printf( "One" );
break;
case 0: printf( "Zero" );
break;
case 2: printf( "Hello World" );
}
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。实际上 switch(x) 中的 x 只是表示执行的“起点”。您需要“中断”来中断执行。因此,如果没有 break,switch 将从 case x 开始执行语句,直到它执行所有后续 case。