首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-08 
switch应用-学生成绩#include iostreamusing namespace stdint main(){int markcout输入成绩cin

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会继续执行 

热点排行