69,369
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
int main(int argc, const char *argv[])
{
int y, m, d;
int a[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; /* the length is 12 not 11 */
while (scanf(" %d/%d/%d", &y, &m, &d) != EOF)
{
int x = 0, i;
if ((y % 100 != 0 && y % 4 == 0) || (y % 400 == 0))
{
a[1] = a[1] + 1;
}
for (i = 0; i < m - 1; i++)
{
x = x + a[i];
}
x = x + d;
printf("%d\n", x);
}
return 0;
}
a[1] = a[1] + 1;
这句修改是永久的。第一个闰年日期修正以后,后序的闰年日期再继续修正就全部是错的了。
程序中的 a 如果声明为 const,此类错误就很好抓了。