【发布时间】:2020-01-12 19:32:49
【问题描述】:
这是我的学校作业,教授的反馈说违反了类型不匹配的规则,也避免了尾随空格。我仍然无法确定确切的问题。
#include<stdio.h>
#define SECS_PER_HOUR 3600 //1 hour = 60mins * 60 secs = 3600 secs
#define METERS_PER_MILE 1600
int main()
{
double distance, time, speedmph, speedmps;
scanf("%lf", &distance);
scanf("%lf", &time);
speedmph = distance / time;
speedmps = (speedmph * METERS_PER_MILE) / SECS_PER_HOUR;
printf("\nThe speed is %.2f miles per hour. \n", speedmph);
printf("The speed is %.2f meters per second. \n\n", speedmps);
main();
}
【问题讨论】:
-
除了@user3386109 指出的更正之外,为什么
main()会递归调用自己?运行几次(好吧,在大多数系统上几千次)迭代,您将耗尽资源。程序应该简单地包裹在一个while循环中,如果time=0则可能带有一个退出。 -
至于类型不匹配,问题一定是你的变量声明为
double,但只使用它们作为float。 -
顺便说一句,@daShier 关于代码最后一行对
main();的调用是正确的。这需要删除。 -
@Dai,虽然现代编译器在意识到程序员(可能)在想什么方面的能力令人惊叹,但我不认为学生应该学习依靠编译器来改正坏习惯. ;)
-
@daShier 不幸的是,C 没有具体化调用系统以启用选择性加入显式尾调用。这样做会使递归函数更容易读写。
标签: c whitespace type-mismatch removing-whitespace