在c ++中switch语句不清楚输出

时间:2017-10-30 21:16:10

标签: c++

这是程序:

ProcessElement

我期望输出:XCBACBA

但正确的输出是:XCBABCBAB

你能解释一下算法吗?看来,我不理解逻辑请求转换语句(以及#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; } 对结果影响后如何没有中断?)

3 个答案:

答案 0 :(得分:1)

之后没有break
case 2: s = s + "A";

应该有一个像

case 1: s = s + "B";
 break;

答案 1 :(得分:1)

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";
}

这就是为什么您的输出在B之后总是有额外的A

答案 2 :(得分:0)

在C ++中,如果在break语句末尾省略case,则执行将进入下一个案例。

在您的代码中,这意味着对于case 2s = s + "A";s = s + "B";都将被执行。