一、软件要求
关于闰年(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 << "\nPlease input a year: ";
}
return 0;
}
四、测试结果