输入今天的日期得到明天的输出

时间:2015-03-21 19:18:06

标签: c date

当我输入日期08/01/2015时,程序会打印00/00/00而不是08/01/2015。什么似乎是问题?

#include <stdio.h>

int main ()
{
    int month = 0;
    int day = 0;
    int year = 0;
    printf("Enter today's date (mm/dd/yyyy): ");
    scanf("%i/%i/%i", &month, &day, &year);
    printf("%.2i/%.2i/%.2i", month, day, year);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

我修改了原来的程序来处理几个问题。但主要的是在%d中使用正确的格式说明符scanf()。使用%i会将输入解释为octal,如果它具有前导0 - 很可能在输入日期时,尤其是当您鼓励使用输出格式时。 0107的月份没有失败,因为octal输入正常工作 - 但0809没有,因为8和{{在9数字表示中不存在1}}。

我还检查了octal的返回值,以确保正确输入了整数日期字段。如果你这样做了,你会发现那里出了问题。

我改变的其他事情是:

检查您输入的日期是否有效以避免GIGO综合症。

如前所述,避免写入每月的数组天数。

将年份限制在公历中,因为有些日子不见了。

scanf()分隔form。例如,您的functionality函数检查了闰年并且还进行了测试(不充分) - 并在输入的日期报告了错误。

将全局日期变量移动为本地变量,这些变量作为函数参数传递。

leapYear()