2015-05-26 314 views
-4
for (int i=0; i<3;i++) 
{ 
    switch (i) 
    { 
case 0: cout << "0"<<endl; 
case 1: cout << "1"<<endl; 
case 2: cout << "2"<<endl; 
    } 
} 

爲什麼打印0 1 2 1 2 2?而不僅僅是0 1 2。我使用gcc。運營商的情況下運營商

+4

你的答案是A [參考上'之開關](http://en.cppreference.com/w/cpp/language/switch)。 – chris

+1

在每種情況之後使用break語句。 –

+1

什麼阻止你閱讀你的C++書? –

回答

0

在switch case塊中,一旦滿足case,程序的控制將停止檢查以查看彼此case是否爲真,並且將繼續執行每個「動作」。例如:

int i = 1; 
switch (i) 
{ 
    case 0: 
     cout << "0"; //action 1 
    case 1: 
     cout << "1"; //action 2 
    case 2: 
     cout << "2"; //action 3 
} 

//output is 12 

因此,在您的for循環中,這也正在發生。要解決此問題(別人提到),使用break聲明在每個動作的結束,以防止編程控制「下降到」每一個動作:

int i = 2; 
switch (i) 
    { 
     case 0: 
      cout << "0"; //action 1 
      break; 
     case 1: 
      cout << "1"; //action 2 
      break; 
     case 2: 
      cout << "2"; //action 3 
      break; 
    } 

    //output is 2 
0

你想這樣的:

for (int i=0; i<3;i++) 
{ 
    switch (i) 
    { 
    case 0: cout << "0"<<endl; break; 
    case 1: cout << "1"<<endl; break; 
    case 2: cout << "2"<<endl; break; 
    } 
} 
0

你有case x:執行每一段代碼後添加break;

switch (i) 
{ 
case 0: cout << "0"<<endl; break; 
case 1: cout << "1"<<endl; break; 
case 2: cout << "2"<<endl; break; 
} 

所以,case後的一段代碼後,就進入到for循環。