我正在尝试对输入的日期进行验证,从1901年1月1日到2299年12月31日,如果日期超出范围,给出错误消息,这是我的代码,有些如何不验证正确的,我做错了什么
int main (void)
{
// insert code here...
int day,month,year;
printf("Enter Year, Month and Day as YYYY,MM,DD\n");
scanf("4%d 2%d 2%d", &year, &month, &day);
if (year>1900 && year <2300) {
if (month>=1 && month <=12)
if (day >=1 && day <=31)
printf("correct/n");
else
printf("invalid/n");
}
return 0;
}
答案 0 :(得分:2)
如果我这样做,我想我会从一个小功能开始,如:
int in_range(int val, int lower, int upper) {
return val >= lower && val <= upper;
}
然后我写了类似的东西:
if (in_range(year, 1901, 2299) && in_range(month, 1, 12) && in_range(day, 1, 31))
printf("Corrent\n");
else
printf("invalid\n";
答案 1 :(得分:2)
问题是你使用的是嵌套的if语句,但是你没有足够的else语句。如果您只是合并语句,它应该有效。
if (year > 1900 && year < 2300 &&
month > 0 && month < 13 &&
day > 0 && day < 32)
{
printf("correct\n");
}
else
{
printf("invalid\n");
}
答案 2 :(得分:0)
在许多情况下,你没有说什么。修正:
if (year>1900 && year <2300) {
if (month>=1 && month <=12) {
if (day >=1 && day <=31)
printf("correct/n");
else
printf("invalid/n");
} else {
printf("invalid/n");
} else {
printf("invalid/n");
}
当然,您可以折叠该代码以避免冗余。
if ( year > 1900 && year < 2300
&& month >= 1 && month <= 12
&& day >= 1 && day <= 31
) {
printf("correct/n");
} else {
printf("invalid/n");
}
我将这个逻辑转移到一个函数中。
int is_valid_date(int year, int month, int day) {
return ( year > 1900 && year < 2300
&& month >= 1 && month <= 12
&& day >= 1 && day <= 31
);
}
if (is_valid_date(year, month, day)){
printf("correct/n");
} else {
printf("invalid/n");
}