切换语句在 C++ 中的输出不清楚



这是程序:

#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 2s = s + "A";s = s + "B";都将被执行。

最新更新