如何在“C”编程中生成特定的时钟时间

时间:2011-06-07 19:18:13

标签: c time clock

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

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()语句中使用时除外) •继续; • 出口(); •abort(); •转到

2 个答案:

答案 0 :(得分:2)

我将通过回答说明使用内置的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用于存储布尔值。)

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

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

  • printf()格式说明符printf将打印填充到两个位置的整数;
  • 如果%.2d为真,则表达式is_pm ? "PM" : "AM"将评估为"PM,如果不是,则is_pm将评估为"AM"

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

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

此部分的其他提示:

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

答案 1 :(得分:1)

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