这是程序:
#include <iostream>
#include <string>
using namespace std;
string add(string s, int n) {
switch (n%3) {
case 2: s = s + "A";
case 1: s = s + "B";
break;
default: s = s + "C";
}
return s;
}
int main() {
string s{"X"};
for (size_t i{0}; i < 6; ++i)
s = add(s, i);
cout << s;
return 0;
}
我预期的输出:XCBACBA
但正确的输出是:XCBABCBAB
你能给我解释一个算法吗? 看来,我不明白逻辑开始开关语句(以及case 2
之后没有中断如何影响结果?
之后没有break
case 2: s = s + "A";
应该有一个就像
case 1: s = s + "B";
break;
break
语句是你离开switch
语句的方式。如果你在case
结束时没有它,它会继续运行下一个case
。因此,您的代码实际上等效于:
switch(n%3) {
case 2:
s = s + "A";
s = s + "B";
break;
case 1:
s = s + "B";
break;
default:
s = s + "C";
}
这就是为什么您的输出总是在A
之后有一个额外的B
。
在C++中,如果在case
语句末尾省略break
,则执行将下降到下一个情况。
在你的代码中,这意味着对于case 2
,s = s + "A";
和s = s + "B";
都将被执行。