diff options
| author | Sadeep Madurange <smadurange@users.noreply.github.com> | 2022-01-04 18:47:36 +0800 |
|---|---|---|
| committer | Sadeep Madurange <smadurange@users.noreply.github.com> | 2022-01-04 18:47:36 +0800 |
| commit | 9eaa5264381f5355c26ced80ec91c8cb156c339f (patch) | |
| tree | de5d2504d225cfc3da6dd48eb95207ec1e6de625 | |
| parent | aee53a9e46d7045b199c5e18324b549285b008ea (diff) | |
| download | k&r-exercises-9eaa5264381f5355c26ced80ec91c8cb156c339f.tar.gz | |
5.8
| -rw-r--r-- | 5/8.c | 30 |
1 files changed, 28 insertions, 2 deletions
@@ -6,8 +6,6 @@ int day_of_year(int year, int month, int day); /* Sets month and day from day of year */ void month_day(int year, int yearday, int *pmonth, int *pday); -int main() { return 0; } - static char daytab[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}}; @@ -15,6 +13,22 @@ static char daytab[2][13] = { int day_of_year(int year, int month, int day) { int i, leap; + // leap year logic is only valid if this is true. + if (year < 1752) { + printf("error: invalid year\n"); + return -1; + } + + if (month < 1 || month > 12) { + printf("error: invalid month\n"); + return -1; + } + + if (day < 1) { + printf("error: invalid day\n"); + return -1; + } + leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0; for (i = 1; i < month; i++) @@ -25,6 +39,18 @@ int day_of_year(int year, int month, int day) { void month_day(int year, int yearday, int *pmonth, int *pday) { int i, leap; + + if (year < 0) { + *pmonth = *pday = 0; + printf("error: invalid year\n"); + return; + } + + if (yearday < 1) { + *pmonth = *pday = 0; + printf("error: invalid yearday\n"); + return; + } leap = year % 4 == 0 && year % 100 != 0 || year % 400 == 0; |
