【问题标题】:How to generate a specific time of clock in "C" programming [closed]如何在“C”编程中生成特定的时钟时间[关闭]
【发布时间】:2011-06-07 19:18:12
【问题描述】:

例如,以下是程序的示例运行:

Enter the hour: 5

Enter the minute: 23

Enter A (for AM) or P (for PM): A

Enter how many minutes to display: 5

The new time is

5:24 AM

5:25 AM

5:26 AM

5:27 AM

5:28 AM

Enter the hour: 11

Enter the minute: 57

Enter A (for AM) or P (for PM): P

Enter how many minutes to display: 4

The new time is

11:58 PM

11:59 PM

12:00 AM

12:01 AM

Enter the hour: 12

Enter the minute: 55

Enter A (for AM) or P (for PM): P

Enter how many minutes to display: 7

The new time is

12:56 PM

12:57 PM

12:58 PM

12:59 PM

1:00 PM

1:01 PM

1:02 PM

另外,我不能使用以下语句:

• 中断; (除非在 switch() 语句中使用) • 继续; • 出口(); • 中止(); • 转到

【问题讨论】:

  • 并不是说我们仍然不愿意提供帮助,但这听起来像是功课?

标签: c time clock


【解决方案1】:

我将在回答前先说明使用内置的 C 时间函数对于这个问题来说太过分了,不幸的是,这种直觉只能从经验中获得。


从问题陈述中,您可以推断出您需要一个“时间”值,该值可以代表 24 小时的时间,以一分钟为粒度。对这个时间值需要的操作是:

  • 将值设置为用户提供的时间,为“小时”值、“分钟”值和“上午/下午”值;
  • 以“11:58 PM”格式输出值;
  • 在时间值上增加一分钟。

您现在必须决定如何在 C 中表示“时间”值。一种选择是使用两个整数(表示小时和分钟)和一个布尔值(表示 AM 或 PM)。当您使用多个值来表示单个逻辑值时,通常会将它们包装到 struct 中,因此我们的“时间”类型可能如下所示:

struct time_of_day {
    int hour; /* From 1 to 12 */
    int minute; /* From 0 to 60 */
    int is_pm; /* 0 or 1 */
};

(在这种情况下,我们遵循int 用于存储布尔值的约定)。

您现在必须弄清楚如何使用这种时间表示来实现上述三个操作。使用这种表示,第一个操作将值设置为用户提供的时间变得非常容易:您只需检查提供的小时和分钟值是否在正确的范围内,然后直接存储它们在struct time_of_dayhourminute 成员中。然后,如果用户输入“AM”,则需要将 is_pm 值设置为 0,如果用户输入“PM”,则需要将值设置为 1

第二个操作输出值也很简单:你可以直接使用printf(),如果你知道这些提示:

  • printf 格式说明符 %.2d 将打印填充到两个位置的整数;
  • 如果is_pm 为真,则表达式is_pm ? "PM" : "AM" 的计算结果为"PM,否则为"AM"

第三个操作,给时间值加一分钟,可以这样分解:

  • 时间的分钟部分加 1;
  • 如果分钟部分现在小于 60,则停止;
  • 将分钟部分设置为 0,并将时间的小时部分加 1;
  • 如果小时部分现在小于 12,则停止;
  • 如果小时部分现在是 12,则从 AM 更改为 PM 或 PM 更改为 AM 并停止;
  • 将小时部分设置为 1。

这部分的附加提示:

  • 表达式 is_pm = !is_pm 会将 is_pm 从 0 更改为 1,从 1 更改为 0。

【讨论】:

  • 如果小时数滚动到 1,则最大小时数应为 12,因此如果小时数为 12,则不应进行进一步修改。
  • @jwodder:从 AM 到 PM 的变化发生在 11:59 -> 12:00 转换,而不是从 12 到 1 的翻转。
【解决方案2】:

我想说最简单的方法是使用strftime(),参见MSDN details。您必须手动执行多个时间输出,但是一旦您填写了 tm 结构,这将是一个非常简单的过程。

【讨论】:

    猜你喜欢
    • 2020-09-03
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    相关资源
    最近更新 更多