验证C中的帮助

时间:2011-05-23 20:48:15

标签: c programming-languages

我正在尝试对输入的日期进行验证,从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;
}

3 个答案:

答案 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");
}