switch应用-学生成绩
#include <iostream>
using namespace std;
int main()
{
int mark;
cout<<"输入成绩";
cin>>mark;
switch (mark/20)
{
case 0:
{
if(mark>=0)
{
cout <<"Please work harder!" <<endl;
break;
}
}
case 1:
{
cout<<"努力"<<endl;
break;
}
case 2:
{
cout<<"加油"<<endl;
break;
}
case 3:
{
cout<<"尚可"<<endl;
break;
}
case 4:
{
cout<<"优良"<<endl;
break;
}
case 5:
{
if(mark<=100)
{
cout<<"优秀"<<endl;
break;
}
}
default:
{
cout<<"error_w"<<endl;
}
}
system("pause");
return 0;
}
为啥输入-1~-19,都不输出error,而输出的是case1的结果呢?除了case的顺序和教程的从5到1不同外,其它大体一样,为啥教程的便没我这问题?
#include <iostream>
using namespace std;
int main()
{
int mark;
cout<<"输入成绩";
cin>>mark;
switch (mark/20)
{
case 0:
{
if(mark<0)
{cout<<"error_x"<<endl;}//为啥-1结果出的是error_x下附“努力”的结果?
else
{cout<<"差生"<<endl;
break;}
}
case 1:
{
cout<<"努力"<<endl;
break;
}
case 2:
{
cout<<"加油"<<endl;
break;
}
case 3:
{
cout<<"尚可"<<endl;
break;
}
case 4:
{
cout<<"优良"<<endl;
break;
}
case 5:
{
if(mark>100)
{cout<<"error_d"<<endl;}/* 同样为啥101~119输入后,error_d 后同时出现的还有error_w? 既然出现error_d,说明有了匹配的case,为什么default还会被启动?*/
else
{cout<<"优秀"<<endl;
break;}
}
default:
{
cout<<"error_w"<<endl;
}
}
system("pause");
return 0;
}
这个上例的修改版除了继承上例的错误外,还有如注释标注的输出结果叠加的疑问,
[解决办法]
#include <iostream>using namespace std;int main(){ int mark; cout<<"输入成绩"; cin>>mark; switch (mark/20) { case 0: { if(mark<0) { cout<<"error_x"<<endl;//为啥-1结果出的是error_x下附“努力”的结果?因为没有break 继续执行case 1 直到break为止 下同! } else { cout<<"差生"<<endl; break; } } case 1: { cout<<"努力"<<endl; break; } case 2: { cout<<"加油"<<endl; break; } case 3: { cout<<"尚可"<<endl; break; } case 4: { cout<<"优良"<<endl; break; } case 5: { if(mark>100) { cout<<"error_d"<<endl;}/* 同样为啥101~119输入后,error_d 后同时出现的还有error_w? 既然出现error_d,说明有了匹配的case,为什么default还会被启动?*/ else { cout<<"优秀"<<endl; break; } } default: { cout<<"error_w"<<endl; } } system("pause"); return 0;}
[解决办法]
1.因为你输入的是-1到-19这意味着mark>=0不成立那么case 0的break语句就没用。
[解决办法]
第2个输入101-109也是这个原因
[解决办法]
case:break;记住就行 如没有break会继续执行