Code Bye

个人不明白为什么提交代码后会得到runtime error的结果,求指点迷津

 

这是题目内容

以下是本人代码

#include<stdio.h>

int main()
{
    int year,month,day,t,k,sum,i;
    int a[2][13]=
    {
        {0,31,28,31,30,31,30,31,31,30,31,30,31},
        {0,31,29,31,30,31,30,31,31,30,31,30,31},
    };

    while(scanf(“%d%d%d”,&year,&month,&day)!=EOF)
    {
        if((year%4==0&&year%100!=0)||(year%400==0))
            k=1;
        else
            k=0;

        if(month>12)
            printf(“Illegal date\n”);
        else if(day>a[k][month])
            printf(“Illegal date\n”);
        else
        {
            sum=0;
            i=1;
            while(i!=month)
            {
                sum=sum+a[k][i];
                i++;
            }
            sum=sum+day;
            printf(“%d\n”,sum);
        }

    }

    return 0;
}

数组越界了吧
引用 1 楼 focuslight 的回复:

数组越界了吧

可我没发现有哪个数组越界啊,还望指点一下,谢谢

20分
提示:年月日均不可小于等于0,但是输入的测试数据有可能出现小于0的情况哦。
10分
比如:
2015 -1 0
10分
奔跑吧,参考:
#include <stdio.h>
#include <stdlib.h>
int year_day[2][13] =
{
	{ 0, 31, 28, 31, 30 ,31, 30, 31, 31, 30, 31, 30, 31 },   
	{ 0, 31, 29, 31, 30 ,31, 30, 31, 31, 30, 31, 30, 31 },  //闰年
};
int check(int year, int month, int day)
{
	int pos = ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0);
	if (year > 0 && month > 0 && month <= 12 && day > 0 && day <= year_day[pos][month])
		return 1;
	return 0;
}
int main(void)
{
	int year, month, day;
	int i, days, pos;
	while(3 == scanf("%d%d%d", &year, &month, &day))
	{
		if (0 == check(year, month, day))
		{
			printf("Illegal date\n");
			continue;
		}
		days = 0;
		pos = ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0);
		for (i = 1; i < month; i++) days += year_day[pos][i];
		days += day;
		printf("%d\n", days);
	}
	return 0;
}
引用 2 楼 ma815841356 的回复:
Quote: 引用 1 楼 focuslight 的回复:

数组越界了吧

可我没发现有哪个数组越界啊,还望指点一下,谢谢

恩恩,我题目理解错误,谢谢


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明个人不明白为什么提交代码后会得到runtime error的结果,求指点迷津