Solution for Exercise 21-9
ex2109
#include <stdio.h> #include <time.h> int main() { time_t tictoc; struct tm *today; int hour; char *am = "a.m."; char *pm = "p.m."; char *m; time(&tictoc); today = localtime(&tictoc); hour=today->tm_hour; if(hour==12) { m=pm; } else if(hour>12) { hour-=12; m=pm; } else { m=am; } printf("The time is %d:%02d:%02d %s\n", hour, today->tm_min, today->tm_sec, m); return(0); }
Notes
* Several methods exist to properly solve this Exercise, so what you see above is only one variation.
* First, look at my solution at Line 29 for padding the output of the minutes and seconds. The %02d
conversion character outputs an integer value two-digits wide and pads a 0
to keep that width if necessary. This was a fix I suggested for the solution to Exercise 21-8.
* Second, I chose to use preset strings to represent AM and PM, as defined at Lines 9 and 10. The char pointer m
is set equal the proper string later in the code.
* To get the AM or PM string, you have to determine whether the hour is greater than 11; in the 24-hour time format, hours 00 through 11 are AM. But there's a problem with displaying the results in a 12-hour format: 12:00 noon is both PM and a value equal to 12. To fix this issue, an if/if-else/else type of decision structure is needed.
* The if statement at Line 16 weeds out the noon condition.
* The else-if statement at Line 20 takes care of the other afternoon hours. If the hour
value is greater than 12, then it's PM, otherwise it's AM.
* The else statement at Line 25 deals with everything else, which should be only AM hours at that point.
* I could have used the today->tm_hour
variable directly in the decision structure, but I need to modify that value later in the code, so I created and used the hour
variable instead.
* If you want to tackle one more problem: Fix the output so that the midnight hour is shown as 12:00:00 and not 00:00:00. Have fun!
Copyright © 1997-2024 by QPBC.
All rights reserved