[英]Why the last 'printf' function didn't execute?
我是 C 的新手,我很困惑为什么最后一个 'printf' function 没有执行。 printf("%d:%.2d %cm, 到达 %d:%.2d %cm\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');
**d_hour** = dep[7] / 60 > 12 ? dep[7] / 60 - 12 : **dep[7] / 60**;
printf("**%d**:%.2d %c.m., arriving at %d:%.2d %c.m.\n",
d_hour, d_minute, dep[7] / 60 > 11 ? 'p' : 'a',
_hour, a_minute, arr[7] / 60 > 11 ? 'p' : 'a');
您的 d_hour 将得到 dep[7] / 60 的结果,结果为浮点数据类型。 但我可以看到 printf 期望 %d 是 integer 数据类型。 请使用数据转换或使用 '%f' 打印数据。
function由于return 0;
而从for
循环内部退出; ,因此最后一个printf
永远不会执行。
添加
如果您不知道内部return
为什么会跳过最后一次打印,则说明您缺乏有关所使用语言的基本知识。
在 C 语言中, return
语句导致执行它的 function 立即终止。 换句话说,它跳转到带有指定返回值的右大括号,即 function 的结果。
如果要终止循环但不退出 function,请使用break
而不是return
。 但请注意, break
只会中断“最近”循环——如果你在嵌套循环中使用它,如下所示:
for (i=0; i<10; i++)
{
// do some stuff with i
for (j=0; j<4; j++)
{
// do some stuff with j
if (some_condition)
break; // <----- break here
// do more stuff about j
}
// do more stuff about i
}
// the rest of the program
那么内部循环内的break
将使执行刚刚超过该循环的结束,以do more stuff about i
,而不是the rest of the program
。
添加
如果您确实了解return 是如何工作的,但不了解它为什么在那里使用,那么您缺乏对程序逻辑的基本知识。
根据输入,您寻求适合用户需求的出发时间。 为此,您需要使用每个出发时间和下一个出发时间。 但是,在时间表中的最后一个之后没有下一个出发,因此您扫描表格直到最后一个项目。
然后,如果之前的条目都不适合用户的输入,那么您想要打印时间表中的最后一个条目。 如果您在循环中找到适当的偏离,例如在i==3
处,则打印它并且不需要打印最后一个条目。 然后,您只需返回即可跳过 function 的 rest 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.