2015-05-26 47 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循环。