一、软件要求
关于闰年(leap year)的判定,是非常简单的。给定一个年份,若该年能被4整除,但却不能被100整除,或者可以被400整除,则我们认定该年为闰年,否则便为平年。
对于正常的用户,若按要求输入任意年份,我们都能给予判定是否为闰年。但是,对于一些非法用户,他们可能并不会按要求进行输入。比如,可能有点用户并不是输入的年份,而是一些字符串或非正整数,例如2012abc,-1868,2015.5等等。对于这些非法的输入,如果我们不做相应的处理,可能将会导致程序崩溃甚至造成更大的危害。
二、测试分析
对于可能出现的情况,我做了如下分析:
编号 | 输入 | 期望输出 |
1 | 2012 | 2012 is leap year |
2 | 1900 | 1900 is nonleap year |
3 | 2000 | 2000 is nonleap year |
4 | 2015 | 2015 is nonleap year |
5 | 2015abc | Input Invalid |
6 | 2015.5 | Input Invalid |
7 | -2015 | Input Invalid |
三、测试代码
#include <iostream> #include <sstream> using namespace std; void CheckLeapYear(string year){ for(int i = 0; i < year.size();i++){ if(year.at(i)>'9' || year.at(i) < '0'){ cout << "Input Invalid!"<< endl; return; } } stringstream ss; int num; ss << year; if(!ss.good()){ cout << "stringstream error!" << endl; } ss >> num; if((num % 4 == 0 && num % 100 != 0)|| num % 400 == 0) cout << num << " is leap year!"<< endl; else cout << num << " is nonleap year!"<< endl; } int main() { string year; cout << "Please input a year: "; while(cin >> year){ CheckLeapYear(year); cout << " Please input a year: "; } return 0; }
四、测试结果