有关在C语言中以特定格式打印数字的问题

时间:2018-10-03 21:26:52

标签: c syntax formatting

C编程问题:

  

我们想在几秒钟内得到一个正整数,并用   格式为HH:MM:SS。

例如,如果我们得到3600,则必须打印01:00:00。或4201-> 01:10:01(必须打印前面的0)。我知道如何获取小时,分钟和秒数,但是我的问题是输出格式。

注意:我们不能使用任何与时间相关的函数(例如time.h函数,结构等),也不能使用if语句(以检查小时数,分钟数或秒数是否小于大于或等于10)。我们应该怎么做?有可能吗?

1 个答案:

答案 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