实时版:http://cpp.sh/953y6
代码:
#include <iostream>
#include <cstdio>
using namespace std;
int main() {
// Complete the code.
int num1 = 8, num2 = 11;
for(int n = num1; n <= num2; n++){
if(n <= 9){
switch(n){
case 1: cout << "one\n";
case 2: cout << "two\n";
case 3: cout << "three\n";
case 4: cout << "four\n";
case 5: cout << "five\n";
case 6: cout << "six\n";
case 7: cout << "seven\n";
case 8: cout << "eight\n";
case 9: cout << "nine\n";
}
}
else if(n % 2 == 0){ //even
cout << "even\n";
}
else if(n > 9 && n %2 == 1){ //odd
cout << "odd\n";
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
数字8到11在for循环中循环.if(n <= 9)只应触发两次,当n为8且n为9时,输出为:
eight
nine
nine
even
odd
Run Code Online (Sandbox Code Playgroud)
为什么?
art*_*rtm 14
因为你没有break并且它是堕落的情况.
case 8: cout << "eight\n"; // <-- need break here
case 9: cout << "nine\n"; // otherwise it's fall-through to here even input is 8
Run Code Online (Sandbox Code Playgroud)
break在每一个case之后switch.因为你的交换机案例中没有break语句:
if(n <= 9){
switch(n){
case 1: cout << "one\n";
case 2: cout << "two\n";
case 3: cout << "three\n";
case 4: cout << "four\n";
case 5: cout << "five\n";
case 6: cout << "six\n";
case 7: cout << "seven\n";
case 8: cout << "eight\n";
case 9: cout << "nine\n";
}
}
Run Code Online (Sandbox Code Playgroud)
当案例8被调用时,它首先打印8,然后落到案例9并打印9.然后在n为9时调用案例9,再次打印9.在以下情况之后添加break语句:
if(n <= 9){
switch(n){
...
case 8: cout << "eight\n";
break;
case 9: cout << "nine\n"; //last case, dont really need a break
}
}
Run Code Online (Sandbox Code Playgroud)
在切换后的每个案例之后放置休息是个好主意,除非是故意的.