0

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

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

5 回答 5

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.

于 2013-08-23T01:05:24.670 回答
4

只是详细说明以前的答案。

在 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 语句,因为无论如何它是最后一个。

在此处查找语法。

希望这可以帮助,

于 2013-08-23T01:18:28.943 回答
2

在 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" );
    }
于 2013-08-23T01:09:20.573 回答
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");并退出开关。

于 2013-08-23T01:13:54.503 回答
1

结果是 4。实际上 switch(x) 中的 x 只是表示执行的“起点”。您需要“中断”来中断执行。因此,如果没有 break,switch 将从 case x 开始执行语句,直到它执行所有后续 case。

于 2013-08-23T02:02:29.213 回答