C 为什么是最后一个';printf';功能没有';不执行?

C 为什么是最后一个';printf';功能没有';不执行?,c,return,C,Return,我是C语言的新手,我不明白为什么最后一个“printf”函数没有执行。printf(“%d:%.2d%c.m.,到达%d:%.2d%c.m.\n”) 结果是“最近的出发时间是晚上9:45,到达时间是晚上11:58”。为什么结果不是“最近的出发时间是晚上9:45,到达时间是晚上11:58”。 最近的起飞时间是晚上9:45,晚上11:58到达 现在我意识到了这一点,因为循环中有“return0”,但我不知道为什么 谢谢你能提供的帮助 int i, user_time, hour,

我是C语言的新手,我不明白为什么最后一个“printf”函数没有执行。printf(“%d:%.2d%c.m.,到达%d:%.2d%c.m.\n”)

结果是“最近的出发时间是晚上9:45,到达时间是晚上11:58”。为什么结果不是“最近的出发时间是晚上9:45,到达时间是晚上11:58”。 最近的起飞时间是晚上9:45,晚上11:58到达

现在我意识到了这一点,因为循环中有“return0”,但我不知道为什么

谢谢你能提供的帮助

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');
inti,
用户时间,
小时,
d_小时,
d_分钟,
一个小时,
一分钟,
分钟,
dep[8]={48058367976784094511401305},
arr[8]={6167112811190968107512801438};
printf(“输入24小时时间:”);
scanf(“%d:%d”,小时和分钟);
用户时间=小时*60+分钟;
printf(“最近离港时间为”);
对于(i=0;i<7;i++){
if(user_time 12?dep[i]/60-12:dep[i]/60;
d_分钟=dep[i]%60;
a_hour=arr[i]/60>12?arr[i]/60-12:arr[i]/60;
每分钟=arr[i]%60;
printf(“%d:%.2d%c.m.,到达%d:%.2d%c.m.\n”,
小时,分钟,副[i]/60>11?'p':'a',
一小时,一分钟,arr[i]/60>11?'p':'a');
返回0;
}
}
d_hour=dep[7]/60>12?dep[7]/60-12:dep[7]/60;
d_分钟=dep[7]%60;
a_hour=arr[7]/60>12?arr[7]/60-12:arr[7]/60;
每分钟=arr[7]%60;
printf(“%d:%.2d%c.m.,到达%d:%.2d%c.m.\n”,
小时,分钟,dep[7]/60>11?'p':'a',
一小时,一分钟,arr[7]/60>11?'p':'a');
您的d_hour将产生dep[7]/60的结果,这将导致float数据类型。 但我可以看到printf需要%d,这是整数数据类型。
请使用数据转换或使用“%f”打印数据。

由于
返回0;
,函数从
for
循环内部退出,因此最后一个
printf
永远不会执行

已添加

如果您不知道为什么内部
返回值
会跳过最后一次打印,则说明您缺乏有关所用语言的基本知识

在C语言中,
return
语句导致执行它的函数立即终止。换句话说,它跳转到具有指定返回值的右大括号,即函数的结果

如果要终止循环但不退出函数,请使用
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

用于(i=0;我可能是因为你
在循环中返回
?也许你应该只
从循环中打破?@一些程序员伙计谢谢你。这是一本书的答案,我不明白它为什么会起作用。当循环中有“返回0”时,它会产生什么影响?如果没有,你想打印时间表中的最后一个条目吗以前的实体符合用户的输入。当您找到一个合适的偏差时,比如循环中的8,那么您就不需要打印最后一个条目,因此您只需返回它就可以跳过函数的其余部分。澄清:我在上面的注释中指的是上午8点,而不是数组中的第8个条目。@CiaPan非常感谢您,我知道您的意思意思是。我现在理解了这个程序:)谢谢你的回答,因为C的特性,它仍然是“int”类型。不,两个表达式,
dep[7]
60
都是
int
类型,所以除法的结果是
dep[7]/60
也是
int
。谢谢你的回答。在最后一次打印F之后,主函数还有另一个“返回0”。如果dep[0]到dep[6]不能满足条件,程序将在“返回0”之后执行该部分。现在我意识到这一点,因为返回0,但我不知道为什么。@Charles请查看扩展的答案。
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