,具体转换规则如下:
90~100为A;
80~89为B;
70~79为C;
60~69为D;
0~59为E;
如果输入数据不在0~100范围内,请输出一行:“Score is error!”。
这题的关键在于最后一句如果输入数据不在范围内如何处理?
如果简单的定义一个整型变量,再复制,如果输入一个字母或者一串字符就会出错。
#include<iostream> using namespace std; int main() { int a; while (cin>>a&&a!=EOF) { if (a >= 0 && a <= 59) cout << "E" << endl; else if (a <= 69) cout << "D" << endl; else if (a <= 79) cout << "C" << endl; else if (a <= 89) cout << "B" << endl; else if (a <= 100) cout << "A" << endl; else cout << "Score is error!" << endl; } system("pause"); return 0; }
上面这段代码运行如何输入字母,程序会立即结束。原因是检测到输入流错误,没有对a赋值自然不会进while循环。
解决这个错误可以改为这样。
#include<iostream> using namespace std; int main() { int a; while (1) { cin >> a; if (!cin) { cin.clear(); cin.sync(); cout << "Score is error!" << endl; continue; } if (a<0) cout << "Score is error!" << endl; else if ( a <= 59) cout << "E" << endl; else if (a <= 69) cout << "D" << endl; else if (a <= 79) cout << "C" << endl; else if (a <= 89) cout << "B" << endl; else if (a <= 100) cout << "A" << endl; else cout << "Score is error!" << endl; } system("pause"); return 0; }
用cin.clear();来重置流,用cin.sync();来清空流。
具体解释看另一篇随笔。
原文:http://www.cnblogs.com/wuyoucao/p/4562341.html