验证 C 语言的帮助

发布于 2024-11-09 10:40:27 字数 575 浏览 0 评论 0原文

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

I'm trying to get this validation for a date entered, from Jan 01 1901 to Dec 31 2299, if the date is out of range, give a error message, this is my code, some how it doesn't validate correctly, am I doing something wrong

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;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一人独醉 2024-11-16 10:40:27

问题是您正在使用嵌套的 if 语句,但没有足够的 else 语句。如果你简单地合并这些陈述,它应该有效。

if (year > 1900 && year < 2300 &&
    month > 0 && month < 13 &&
    day > 0 && day < 32)
{
    printf("correct\n");
}
else
{
    printf("invalid\n");
}

The problem is that you're using nested if statements, but you don't have enough else statements. If you simply consolidate the statements it should work.

if (year > 1900 && year < 2300 &&
    month > 0 && month < 13 &&
    day > 0 && day < 32)
{
    printf("correct\n");
}
else
{
    printf("invalid\n");
}
孤独岁月 2024-11-16 10:40:27

如果我这样做,我想我会从一个小函数开始,例如:

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";

If I were doing this, I think I'd start with a small function like:

int in_range(int val, int lower, int upper) { 
    return val >= lower && val <= upper;
}

Then I'd write something like:

if (in_range(year, 1901, 2299) && in_range(month, 1, 12) && in_range(day, 1, 31))
    printf("Corrent\n");
else
    printf("invalid\n";
天涯离梦残月幽梦 2024-11-16 10:40:27

对于许多条件你什么也没说。修复:

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

You don't say anything for a number of conditions. Fix:

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

Of course, you could collapse that code to avoid redundancies.

if (  year  >  1900 && year  <  2300
   && month >=    1 && month <=   12
   && day   >=    1 && day   <=   31
) {
   printf("correct/n");
} else {
   printf("invalid/n");
}

I'd move that logic into a function.

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");
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文