From 60356de304e4b0b3f48ad19468f3d7cc254a833e Mon Sep 17 00:00:00 2001 From: Peter Date: Thu, 3 Aug 2023 19:02:17 +0000 Subject: [PATCH] lab 1 - soln --- lab01-leap-year/test_leap.c | 42 +++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/lab01-leap-year/test_leap.c b/lab01-leap-year/test_leap.c index 633579c..b912b5c 100644 --- a/lab01-leap-year/test_leap.c +++ b/lab01-leap-year/test_leap.c @@ -6,24 +6,20 @@ /* return 0 (false) or 1 (true), depending on whether * `year` is a leap year or not. */ -int is_leap(long year) { - - if (year % 4 != 0) { - return 0; - } - - if (year % 100 == 0) { - return 1; - } - - return 0; +int is_leap(long year) +{ + return year % 4 == 0 // Every year that is exactly divisible by four is a leap year + && (year % 100 != 0 // except for years that are exactly divisible by 100 + || year % 400 == 0); // but these centurial years are leap years if they are exactly divisible by 400 } -int main(int argc, char **argv) { +int main(int argc, char **argv) +{ argc--; argv++; - if (argc != 1) { + if (argc != 1) + { fprintf(stderr, "Error: expected 1 command-line argument (a YEAR), but got %d\n", argc); exit(1); } @@ -35,19 +31,25 @@ int main(int argc, char **argv) { long year = strtol(argv[0], &end, 10); int res_errno = errno; - if (end == argv[0]) { + if (end == argv[0]) + { fprintf(stderr, "Error: couldn't interpret '%s' as a number\n", argv[0]); exit(1); - } else if (res_errno == ERANGE) { + } + else if (res_errno == ERANGE) + { fprintf(stderr, "Error: '%s' is outside the range of numbers we can handle\n", argv[0]); exit(1); - } else { - if (is_leap(year)) { + } + else + { + if (is_leap(year)) + { printf("%ld is a leap year\n", year); - } else { + } + else + { printf("%ld is not a leap year\n", year); } } - } -