切换语句在 C++ 中的输出不清楚
switch statement unclear output in 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 2
,s = s + "A";
和s = s + "B";
都将被执行。
相关文章:
- 关于隐式声明的复制构造函数的引用在逻辑上不清楚
- C++复制 c'tor 现在确实会采取行动。 不清楚为什么
- 为什么Qt Creator的应用程序输出不能从spdlog记录器打印
- Windows 10命令提示符的输出不正确
- 为什么数组到指针的输出不相关
- 我的求解(字符串 a、字符串 b)的输出与随机哈希中的预期输出不匹配
- 程序的输出不是来的,它是一个链表程序
- C++ - 为什么 unicode 输出不正确?
- 存储和打印字符,但输出不是预期的
- 两种情况下的输出不应该相同吗?
- 我的叉子输出不正确
- 矢量编程:不清楚矢量的初始化
- Opengl 4 调试输出不起作用
- bcdedit 文件输出不起作用,但其他命令可以
- u张量模型输出不等于预期输出
- 输出不是我想要C++的
- C++使用 CEIL 和长度输出不正确的值
- 调用虚函数的逻辑不清楚(或者是方法隐藏?
- cudaMemcpy 在从设备读取到主机时返回 cudaErrorInvalidArgument,不清楚原因
- 切换语句在 C++ 中的输出不清楚