为什么这个switch语句返回ZeroHello World而不是Zero?

时间:2013-08-23 01:04:17

标签: c switch-statement

多项选择题:以下代码的结果是什么?

int x=0;
switch(x)
{
  case 1: printf( "One" );
  case 0: printf( "Zero" );
  case 2: printf( "Hello World" );
}

选项:

  1. One
  2. Zero
  3. Hello World
  4. ZeroHello World
  5. 我以为它只会返回Zero。我玩过int值是什么,它改变了输出但是我无法跟踪这里发生的事情。

5 个答案:

答案 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的语句,直到它执行以下所有情况。