2013-08-23 135 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中的語句,直到它執行以下所有情況。

相關問題