当我输入日期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;
}
答案 0 :(得分:1)
我修改了原来的程序来处理几个问题。但主要的是在%d
中使用正确的格式说明符scanf()
。使用%i
会将输入解释为octal
,如果它具有前导0
- 很可能在输入日期时,尤其是当您鼓励使用输出格式时。 01
到07
的月份没有失败,因为octal
输入正常工作 - 但08
和09
没有,因为8
和{{在9
数字表示中不存在1}}。
我还检查了octal
的返回值,以确保正确输入了整数日期字段。如果你这样做了,你会发现那里出了问题。
我改变的其他事情是:
检查您输入的日期是否有效以避免GIGO综合症。
如前所述,避免写入每月的数组天数。
将年份限制在公历中,因为有些日子不见了。
从scanf()
分隔form
。例如,您的functionality
函数检查了闰年并且还进行了测试(不充分) - 并在输入的日期报告了错误。
将全局日期变量移动为本地变量,这些变量作为函数参数传递。
leapYear()