如何解决验证C中的帮助
| 我正在尝试对输入的日期(从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;
}
解决方法
问题在于您正在使用嵌套的if语句,但是您没有足够的else语句。如果仅合并语句,则它应该起作用。
if (year > 1900 && year < 2300 &&
month > 0 && month < 13 &&
day > 0 && day < 32)
{
printf(\"correct\\n\");
}
else
{
printf(\"invalid\\n\");
}
,如果要这样做,我想我将从一个小的函数开始:
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,31))
printf(\"Corrent\\n\");
else
printf(\"invalid\\n\";
,在很多情况下您什么都不会说。固定:
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\");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。