【问题标题】:A question about printing numbers in a specific format in C关于在 C 中以特定格式打印数字的问题
【发布时间】:2018-10-03 21:26:51
【问题描述】:

C 编程问题:

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

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

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

【问题讨论】:

  • @user3121023 谢谢。是否有任何站点具有 C 输出中使用百分比的完整列表?
  • @user3121023。不,我没有 Linux,那是因为我想要一个完整的互联网列表。无论如何,如果您提交答案,我可以接受它作为最佳答案。谢谢。
  • @user3121023。谢谢。
  • 你的教科书不解释如何使用printf()吗?

标签: c syntax formatting


【解决方案1】:

我们希望以秒为单位得到一个正整数,并以 HH:MM:SS 格式打印。

我知道如何获取小时、分钟和秒数,但我的问题在于输出格式。

使用"%02d"@user3121023

"2"最小 文本宽度。
"0" 导致填充使用'0' 来弥补最小宽度。

printf("%02d:%02d:%02d", hour, minute, second);

更有趣的是如何打印所有int total。将其分解为hour, minute, secondhour 的范围问题存在符号问题。

".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

【讨论】:

    猜你喜欢
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多