'分段错误(核心转储)'。但是,如果我使用 if ... else 语句,它不会给我任何错误。在这种情况下错误消息的原因是什么?如何在没有错误的情况下使用 case 语句?
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char* argv[]){
/*
if (argc == 1){
cout << argv[0] << endl;
}else
if (argc == 2){
int n;
n = atoi(argv[0]);
cout << n << endl;
}
*/
switch (argc){
case 1:{
cout << argv[0] << endl;
}
case 2:{
int n;
n = atoi(argv[1]);
cout << n << endl;
}
}
return 0;
}
答案 0 :(得分:4)
break
块中没有switch
。因此,每个案例都将通过。这会在argc
为1
时调用未定义的行为。当您不希望通过时,您应该从开关 break
。
switch (argc){
case 1:{
cout << argv[0] << endl;
break;
}
case 2:{
int n;
n = atoi(argv[1]);
cout << n << endl;
break;
}
}
从C ++ 17开始,当编译器警告你隐式 fallthroughs (它不是必需的)时,你可以使用属性[[fallthrough]]
来声明 fallthrough 是故意的。