在 c++ 中在开关情况下使用和不使用"break"时的不同输出



我正在解决HackerRank -
Question Link - https://www.hackerrank.com/challenges/maximum-element/problem

的问题在一个解决方案中,我在开关情况下使用了"break"语句,在另一个解决方案中我没有。 当我不使用中断语句时,解决方案是错误的。这背后的原因是什么?
输入 -

10
1 97
2
1 20
2
1 26
1 20
2
3
1 91
3

带中断语句-

#include <bits/stdc++.h>
using namespace std;
int main() {
int noOfTestCases;
cin>>noOfTestCases;
vector <int> st;
for(int x=0; x<noOfTestCases; x++){
int query;
cin>>query;
switch (query) {
case 1:
int number;
cin>>number;
if(st.empty()){
st.push_back(number);
}
else if(number > st[st.size()-1]){
st.push_back(number);
}
else{
st.push_back(st[st.size()-1]);
}
break;
case 2:
if(!st.empty()){
st.pop_back();
}
break;
case 3:
cout<<st[st.size()-1]<<endl;
}
}
}
//Output - 
//26
//91

没有中断声明-

#include <bits/stdc++.h>
using namespace std;
int main() {
int noOfTestCases;
cin>>noOfTestCases;
vector <int> st;
for(int x=0; x<noOfTestCases; x++){
int query;
cin>>query;
switch (query) {
case 1:
int number;
cin>>number;
if(st.empty()){
st.push_back(number);
}
else if(number > st[st.size()-1]){
st.push_back(number);
}
else{
st.push_back(st[st.size()-1]);
}
case 2:
if(!st.empty()){
st.pop_back();
}
case 3:
cout<<st[st.size()-1]<<" "<<query<<endl;
}
}
}
//Output - 
//0
//0
//0
//0
//0
//0
//0
//0
//0
//0

考虑以下代码

switch (x) {
case 1:
std::cout << "onen";
case 2:
std::cout << "twon";
break;
case 3:
std::cout << "threen";
}

如果x为 1,它将同时打印onetwo。然后,由于break语句,它将退出交换机块。注意x打印"一"后不会与2进行比较,直接落入打印"二"。

所以我对开关大小写语句有一个误解——

我的想法- 我认为在开关大小写中,如果表达式等于任何情况 D,那么进一步的情况 - E、F、G 将不会执行,无论 break 语句如何。

现实- 如果一个表达式等于任何情况 D,那么如果我们不使用 break 语句,进一步的情况 - E、F、G 也会被执行。

感谢杰弗里和保罗桑德斯澄清这个问题。

最新更新