首页 > 解决方案 > 如何修复 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();
}

标签: cwhitespacetype-mismatchremoving-whitespace

解决方案


您的代码很可能应该如下所示:

#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);
    }
}

变化是:

  1. 用一个空行分隔不相关的行。
  2. 缩进源以反映结构。
  3. 在自己的行中定义每个变量。如果您在其他程序中定义指针,这提高了可读性并且是避免问题的好习惯。
  4. 关于类型不匹配:更改%.2f%.2lf匹配double。但是,正如@user3386109 所写,因为printf()它是一样的。如果有一些float,它将被强制转换为double.
  5. 关于尾随空格:删除之前的空格\n
  6. 如果编译器没有实现尾递归,则添加无限循环以避免堆栈溢出(没有双关语)。

推荐阅读