Мы хотим получить положительное целое число в секундах и напечатать его в формате ЧЧ: ММ: СС.
Я знаю, как получить часы, минуты и секунды, но моя проблема сформат вывода.
Использование "%02d"
@ user3121023 .
"2"
- это минимальная ширина текста.
"0"
заставляет заполнение использовать '0'
для создания минимальной ширины.
printf("%02d:%02d:%02d", hour, minute, second);
Более интересно, как распечатать все int total
.Это имеет проблемы со знаком при разбивке на hour, minute, second
и проблемы с диапазоном для hour
.
".2"
- это ширина минимум цифр.Это следует использовать с hour
для гарантии того, что -7 напечатано как «-07», а не «-7».
#define SECS_PER_MIN 60
#define MINS_PER_HOUR 60
// Print time, valid for all `int`
void print_hms(int total /* total seconds */) {
int sec = total%SECS_PER_MIN;
total /= SECS_PER_MIN;
int min = total%MINS_PER_HOUR;
total /= MINS_PER_HOUR;
int hour = total;
// use abs() to print negative, `min,sec` without a sign
printf("%0.2d:%02d:%02d", hour, abs(min), abs(sec));
}
Образец
print_hms(0);
print_hms(3600 + 23*60 + 45);
print_hms(24*3600);
print_hms(-7*3600);
print_hms(INT_MIN);
00:00:00
01:23:45
24:00:00
-07:00:00
-596523:14:08