繁体   English   中英

为什么最后一个'printf' function 没有执行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM