例如,以下是该程序的示例运行:
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(); •转到
答案 0 :(得分:2)
我将通过回答说明使用内置的C时间函数对于这个问题来说是过度的,不幸的是,这只是你从经验中获得的那种直觉。
从问题陈述中,您可以推断出您需要一个“时间”值,该值可以代表24小时的时间,一分钟的粒度。此时间值所需的操作是:
您现在必须决定如何在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"
。第三个操作,添加分钟到时间值,可以这样分解:
此部分的其他提示:
is_pm = !is_pm
会将is_pm
从0更改为1,将1更改为0. 答案 1 :(得分:1)
我想说最简单的方法是使用strftime()
,请参阅MSDN details。您必须手动执行多个时间输出,但是一旦填写了tm结构,这是一个非常简单的过程。