Skip to content

Commit 7f593ea

Browse files
committed
simplify erro checking
1 parent ab60cea commit 7f593ea

File tree

1 file changed

+17
-25
lines changed

1 file changed

+17
-25
lines changed

chapter05/5-9.c

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
/*
22
* Exercise 5-9. Rewrite the routine day_of_year and month_day with pointers
33
* instead of indexing.
4+
*
45
* By Faisal Saadatmand
56
*/
67

@@ -9,9 +10,9 @@
910
/* functions */
1011
int day_of_year(int, int, int);
1112
void month_day(int, int, int *, int *);
12-
char *month_name(int );
13+
char *month_name(int);
1314

14-
static char daytab[2][13] = {
15+
static char daytab[][13] = {
1516
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
1617
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
1718
};
@@ -24,18 +25,11 @@ int day_of_year(int year, int month, int day)
2425
{
2526
int i, leap;
2627

27-
if ((year < 1) || (month < 1 && month > 12) || (day < 1 && day > 31))
28+
if ((year < 1) || month < 1 || month > 12 || day < 1 || day > 31)
2829
return -1;
29-
3030
leap = (year % 4 == 0 && year % 100) || year % 400 == 0;
31-
3231
for (i = 1; i < month; i++)
33-
day += *((*(pdaytab + leap)) + i);
34-
//day += *(daytab[leap] + i);
35-
//day += (*(daytab + leap)) [i];
36-
//day += *((*(daytab + leap)) + i);
37-
//day += *(&daytab[0][0] + 4 * leap + i);
38-
32+
day += *(*(pdaytab + leap) + i);
3933
return day;
4034
}
4135

@@ -44,14 +38,15 @@ void month_day(int year, int yearday, int *pmonth, int *pday)
4438
{
4539
int i, leap;
4640

41+
if (year < 0 || yearday < 1 || yearday > 366) {
42+
*pmonth = *pday = 0;
43+
return;
44+
}
4745
leap = (year % 4 == 0 && year % 100) || year % 400 == 0;
48-
4946
for (i = 1; yearday > daytab[leap][i]; i++)
5047
yearday -= *(*(pdaytab + leap) + i);
51-
52-
(i < 1 || i > 12 || year < 1) ? (*pmonth = **pdaytab) : (*pmonth = i);
53-
(yearday < 1 || yearday > 366 || year < 1) ? (*pday = **pdaytab) :
54-
(*pday = yearday);
48+
*pmonth = i;
49+
*pday = yearday;
5550
}
5651

5752
/* month_name: return name of n-th month */
@@ -72,17 +67,14 @@ int main(void)
7267
{
7368
int yearday, month, day;
7469

75-
if ((yearday = day_of_year(2018, 9, 3)) >= 0)
76-
printf("%i day of the year\n", yearday);
70+
if ((yearday = day_of_year(2018, 9, 3)) < 0)
71+
printf("Invalid input\n");
7772
else
78-
printf("invalid input\n");
79-
73+
printf("day of the year: %i\n", yearday);
8074
month_day(2018, 246, &month, &day);
81-
82-
if (month != 0 && day != 0)
83-
printf("%s %i\n", month_name(month), day);
75+
if (!month || !day)
76+
printf("Invalid input\n");
8477
else
85-
printf("invalid input\n");
86-
78+
printf("%s %i\n", month_name(month), day);
8779
return 0;
8880
}

0 commit comments

Comments
 (0)