C 为什么是最后一个';printf';功能没有';不执行?
我是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”,但我不知道为什么 谢谢你能提供的帮助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,
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