【发布时间】:2021-04-02 07:58:38
【问题描述】:
我是 C 新手,我很困惑为什么最后一个“printf”函数没有执行。 printf("%d:%.2d %c.m.,到达%d:%.2d %c.m.\n")
结果是“最近的出发时间是晚上 9 点 45 分,晚上 11 点 58 分到达”为什么结果不是'最近的出发时间是晚上 9 点 45 分,晚上 11 点 58 分到达。 最近的出发时间是晚上 9 点 45 分,晚上 11 点 58 分到达'
现在我意识到它是因为循环中的'return 0',但我不知道为什么。
感谢您提供的任何帮助。
int i,
user_time,
hour,
d_hour,
d_minute,
a_hour,
a_minute,
minute,
dep[8] = {480, 583, 679, 767, 840, 945, 1140, 1305},
arr[8] = {616, 712, 811, 900, 968, 1075, 1280, 1438};
printf("Enter a 24-hour time: ");
scanf("%d :%d", &hour, &minute);
user_time = hour * 60 + minute;
printf("Closest departure time is ");
for (i = 0; i < 7; i++) {
if (user_time <= dep[i] +
(dep[i + 1] - dep[i]) / 2) {
d_hour = dep[i] / 60 > 12 ? dep[i] / 60 - 12 : dep[i] / 60;
d_minute = dep[i] % 60;
a_hour = arr[i] / 60 > 12 ? arr[i] / 60 - 12 : arr[i] / 60;
a_minute = arr[i] % 60;
printf("%d:%.2d %c.m., arriving at %d:%.2d %c.m.\n",
d_hour, d_minute, dep[i] / 60 > 11 ? 'p' : 'a',
a_hour, a_minute, arr[i] / 60 > 11 ? 'p' : 'a');
return 0;
}
}
d_hour = dep[7] / 60 > 12 ? dep[7] / 60 - 12 : dep[7] / 60;
d_minute = dep[7] % 60;
a_hour = arr[7] / 60 > 12 ? arr[7] / 60 - 12 : arr[7] / 60;
a_minute = arr[7] % 60;
printf("%d:%.2d %c.m., arriving at %d:%.2d %c.m.\n",
d_hour, d_minute, dep[7] / 60 > 11 ? 'p' : 'a',
a_hour, a_minute, arr[7] / 60 > 11 ? 'p' : 'a');
【问题讨论】:
-
可能是因为你
return在循环内?也许您应该只将break排除在循环之外? -
@Some 程序员老兄 谢谢。这是一本书的答案,我不明白它为什么有效。当循环中有'return 0'时,它的作用是什么?
-
如果之前的条目都不适合用户的输入,您想打印时间表中的最后一个条目。当你找到一个合适的出发点时,比如在循环中的 8 点,那么你就不需要打印最后一个条目,所以你可以简单地通过从它返回来跳过函数的其余部分。
-
澄清:我的意思是上面评论中的上午 8 点,而不是数组中的第 8 个条目。
-
@CiaPan 非常感谢,我明白你的意思。我现在了解该程序:)