Exercise 5.8. There is no error checking in day_of_year or month_day. Remedy this defect.
/* day_of_year */
int day_of_year(int year, int month, int day)
{
int i, leap;
if(year < 1)
return -1;
leap = (year%4 == 0 && year%100 != 0) || year%400 == 0;
if(month < 1 || month > 12)
return -1;
if(day < 1 || day > daytab[leap][month])
return -1;
for(i = 1; i < month; i++)
day += daytab[leap][i];
return day;
}
/* month_day */
void month_day(int year, int yearday, int *pmonth, int *pday)
{
int i, leap;
if(year < 1 || yearday < 1)
{
*pmonth = -1;
*pday = -1;
return;
}
leap = (year%4 == 0 && year%100 != 0) || year%400 == 0;
if(leap == 1 && yearday > 366)
{
*pmonth = -1;
*pday = -1;
return;
}
if(leap == 0 && yearday > 365)
{
*pmonth = -1;
*pday = -1;
return;
}
for(i = 0; yearday > daytab[leap][i]; i++)
yearday -= daytab[leap][i];
*pmonth = i;
*pday = yearday;
}
Комментариев нет:
Отправить комментарий