Her er min løsning: Det viser sig at være lidt omstændeligt at introducere en løkke, der beregner quotient og rest. Jeg tror faktisk ikke at det kan betale sig. Hvis der var endnu flere tidsdele, ville jeg dog klart overveje ideen (igen).#include <stdio.h>
#define SECONDS_PER_MINUTE 60
#define SECONDS_PER_HOUR (SECONDS_PER_MINUTE * 60)
#define SECONDS_PER_DAY (SECONDS_PER_HOUR* 24)
#define SECONDS_PER_WEEK (SECONDS_PER_DAY * 7)
#define UNIT_COUNT 5
void decompose_seconds_to_units(int input_seconds, int result_units[]);
int second_amount[] = {SECONDS_PER_WEEK, SECONDS_PER_DAY, SECONDS_PER_HOUR, SECONDS_PER_MINUTE};
char *units[] = {"weeks", "days", "hours", "minutes", "seconds"};
int main(void){
int input_seconds, i;
int result_units[UNIT_COUNT];
/* Prompt for input: */
printf("Read a non-negative number of seconds: ");
scanf("%d", &input_seconds);
decompose_seconds_to_units(input_seconds, result_units);
/* Print the calculated units */
for(i = 0; i < UNIT_COUNT; ++i)
printf("%d %s ", result_units[i], units[i]);
return 0;
}
/* Decompose the seconds in input_seconds to the units enumerated in the global array units */
void decompose_seconds_to_units(int input_seconds, int result_units[]){
int i = 0,
rest_seconds = input_seconds,
parts = sizeof(second_amount) / sizeof(int);
while (i < parts){
result_units[i] = rest_seconds / second_amount[i];
rest_seconds = rest_seconds % second_amount[i];
++i;
}
result_units[i] = rest_seconds;
}