2

这是我在 C 语言中的第一个程序。当我运行它时,它发现的斜边很大。我将 A 面和 B 面输入为 2,输出为130899047838401965660347085857614698509581032940206478883553280.000000. 我做错了什么?

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int die(const char *msg);
double hypotenuse(double side0, double side1);

int main()
{
    double a, b, c;
    printf("Enter side A: ");
    if (scanf_s("%1f", &a) != 1)
        die("input failure");
    printf("Enter side B: ");
    if (scanf_s("%1f", &b) != 1)
        die("input failure");
    c = hypotenuse(a, b);
    printf("The hypotenuse is %f\n ", c);
}

int die(const char *msg)
{
    printf("Fatal Error: %s\n", msg);
    exit(1);
}

double hypotenuse(double side0, double side1)
{
    return sqrt((side0 * side0) + (side1 * side1));
}
4

1 回答 1

5

scanf()您的转换说明符中有一个错字:%1f应该%lf使用 ell 而不是 one。

这两个字符看起来很相似。为此,也建议避免命名变量lorlll1​​。

说明符%1f尝试将流中最多 1 个字节转换为浮点数,并将结果存储到float传递地址的 a 中。您传递 a 的地址double,因此行为未定义。您可以通过提高警告级别来防止这种愚蠢的错误:

  • gcc -Wall -Wextra -Werror
  • clang -Weverything -Werror
  • cl /W3cl /W4cl /Wall
于 2017-09-02T04:09:26.993 回答