c - 如何修复 C 中类型不匹配和尾随空格的错误
问题描述
这是我的学校作业,教授的反馈说违反了类型不匹配的规则,也避免了尾随空格。我仍然无法确定确切的问题。
#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();
}
解决方案
您的代码很可能应该如下所示:
#include<stdio.h>
#define SECS_PER_HOUR 3600 // 1 hour = 60mins * 60 secs = 3600 secs
#define METERS_PER_MILE 1600
int main(void)
{
for (;;)
{
double distance;
double time;
double speedmph;
double speedmps;
scanf("%lf", &distance);
scanf("%lf", &time);
speedmph = distance / time;
speedmps = (speedmph * METERS_PER_MILE) / SECS_PER_HOUR;
printf("\nThe speed is %.2lf miles per hour.\n", speedmph);
printf("The speed is %.2lf meters per second.\n\n", speedmps);
}
}
变化是:
- 用一个空行分隔不相关的行。
- 缩进源以反映结构。
- 在自己的行中定义每个变量。如果您在其他程序中定义指针,这提高了可读性并且是避免问题的好习惯。
- 关于类型不匹配:更改
%.2f
为%.2lf
匹配double
。但是,正如@user3386109 所写,因为printf()
它是一样的。如果有一些float
,它将被强制转换为double
. - 关于尾随空格:删除之前的空格
\n
。 - 如果编译器没有实现尾递归,则添加无限循环以避免堆栈溢出(没有双关语)。
推荐阅读
- jquery - jQuery animate 每次都执行相同的时间,即使位置已经改变 - 有什么想法吗?
- javascript - Intro.js 的 React 包装器未识别元素
- android - Android Studio 解码文件不起作用,如何进行?
- javascript - 按下 enter 时防止 textarea 向下滚动
- reactjs - 使 useEffect 中的函数在挂载时运行?
- pandas - 将字典应用于包含字符串的数据框列
- swift - 为什么从登录页面到主页的转换不起作用(swift)?
- docker - 如何根据过去的使用情况删除旧的 Docker 镜像
- ray - Ray.Tune 的 PB2 在同一训练点的同一 actor 上始终失败,因为 Tune 代码返回 ValueError
- java - SpringBoot中的HttpServletRequest getRequestURI