【问题标题】:How to fix the error of type-mismatch and trailing spaces in C如何修复 C 中类型不匹配和尾随空格的错误
【发布时间】: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


【解决方案1】:

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

#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. 如果编译器没有实现尾递归,则添加无限循环以避免堆栈溢出(没有双关语)。

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 2019-04-10
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-06
    相关资源
    最近更新 更多