C编程问题:
我们想在几秒钟内得到一个正整数,并用 格式为HH:MM:SS。
例如,如果我们得到3600,则必须打印01:00:00。或4201-> 01:10:01(必须打印前面的0)。我知道如何获取小时,分钟和秒数,但是我的问题是输出格式。
注意:我们不能使用任何与时间相关的函数(例如time.h函数,结构等),也不能使用if语句(以检查小时数,分钟数或秒数是否小于大于或等于10)。我们应该怎么做?有可能吗?
答案 0 :(得分:2)
我们希望在几秒钟内获得一个正整数,并以HH:MM:SS格式打印。
我知道如何获取小时,分钟和秒数,但是我的问题是输出格式。
使用"%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