首页 > 解决方案 > 用 C 编写一个程序,提示用户输入两个日期,然后指示日历上哪个日期更早

问题描述

#include <stdio.h>
    
    
int main(void)
{
    int month, day, year, month_2, day_2, year_2;
    printf("Enter first date (mm/dd/yy): ");
    scanf("%d/%d/%d", &month, &day, &year);

    printf("Enter second date (mm/dd/yy): ");
    scanf("%d/%d/%d", &month_2, &day_2, &year_2);

    if (year < year_2 && month < month_2 && day < day_2)
        printf("%d/%d/%d is earlier than %d/%d/%d\n", month, day, year, month_2, day_2, year_2);

    else if (year == year_2 && month == month_2 && day == day_2)
        printf("%d/%d/%d is earlier than %d/%d/%d\n", month, day, year, month_2, day_2, year_2);
    else
        printf("%d/%d/%d is earlier than %d/%d/%d\n", month, day, year, month_2, day_2, year_2);

}

我得到 3/6/8 的输出早于 5/17/7,这是错误的。我完全陷入了这个问题,非常感谢您的帮助。我正在使用 KN King 的 C 编程:一种现代方法, 2008 年第 2 版。

标签: c

解决方案


程序的语法看起来正确,但逻辑却不正确。要比较日期,首先进行年份,如果它们相等则进行月份,它们是否仍然相等,比较天。

因此,您必须稍微修改条件。以下代码提供代码的条件部分。

顺便说一句,您的 printf() 函数也不正确,您一直在打印第一个日期早于第二个日期。

if (year < year_2)
        printf("%d/%d/%d is earlier than %d/%d/%d\n", month, day, year, month_2, day_2, year_2);
    else if (year == year_2)
        if (month < month_2)
            printf("%d/%d/%d is earlier than %d/%d/%d\n", month, day, year, month_2, day_2, year_2);
        else if (month == month_2)
            if (day < day_2)
                printf("%d/%d/%d is earlier than %d/%d/%d\n", month, day, year, month_2, day_2, year_2);
            else if (day == day_2)
                printf("%d/%d/%d is equal to %d/%d/%d\n", month_2, day_2, year_2, month, day, year);
            else
                printf("%d/%d/%d is earlier than %d/%d/%d\n", month_2, day_2, year_2, month, day, year);            
        else
            printf("%d/%d/%d is earlier than %d/%d/%d\n", month_2, day_2, year_2, month, day, year);
    else
        printf("%d/%d/%d is earlier than %d/%d/%d\n", month_2, day_2, year_2, month, day, year);

推荐阅读