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



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

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

我以为它只会返回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开始执行语句,直到执行以下所有案例。

最新更新