2013-08-23 93 views
0

多项选择题:以下代码的结果是什么?为什么这个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值,它改变了输出,但我不能跟随这里发生的事情。

+0

“我认为它只会返回零。” - 为什么?假设不能代替学习和学习至少编程语言的*基础*。 (此外,没有任何返回。)请阅读此:http://meta.stackexchange.com/questions/182266/how-much-research-effort-is-expected-of-stack-overflow-users/ –

回答

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

+0

谢谢我没有认识到没有休息 –

2

在C语句语句“fall through”中,即case语句将开始在第一个真实条件上执行并继续使用case语句的结尾或遇到“退出”。

您需要像这样显式地退出。

int x=0; 
    switch(x) 
    { 
    case 1: printf("One"); 
      break; 
    case 0: printf("Zero"); 
      break; 
    case 2: printf("Hello World"); 
    } 
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

只是阐述了以前的答案。

在C语言(以及其他类型的语言)中,switch语句中的例子被用作标签。基于x的值,它将转到正确的case语句,但是除非你有'break'语句,否则它将通过下面的每个其他case语句。

除此之外,在末尾使用默认值也是一个好主意,因此如果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的语法。

希望这有助于,

1

结果为4。 其实中的x开关(x)的只是指示执行的“起点”。你需要“休息”来打破执行。 因此,如果没有中断,交换机将开始执行case x中的语句,直到它执行以下所有情况。

相关问题