读书人

switch应用-学生成绩解决方案

发布时间: 2012-03-08 13:30:13 作者: rapoo

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;


}
这个上例的修改版除了继承上例的错误外,还有如注释标注的输出结果叠加的疑问,



[解决办法]

C/C++ code
#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也是这个原因
[解决办法]
C/C++ code
case:break;记住就行 如没有break会继续执行 

读书人网 >C++

热点推荐