我是C的新手,有一些scanf和我的变量等于0的问题

时间:2016-01-24 20:29:13

标签: c formatting scanf

问题在于,无论如何,我的深度要么等于0,要么显示它等于你在扫描中放入的任何东西,但是仍然会像以后一样0。我试着搞乱格式,但无济于事。谢谢!

#include <stdio.h>
int main(void)
{
    double depth;
    printf("Please enter the current depth in Kilometers.");
    scanf("%d", &depth);
    printf("The depth is %f \n", depth);
    double celcius = (10* depth + 20);
    printf("The temperature in celcius  is %f \n", celcius);
    double fahrenheit = (1.8*celcius+31);
    printf("The temperature in fahrenheit  is %f \n", fahrenheit);
}

3 个答案:

答案 0 :(得分:2)

当您读取并解析输入为整数"%d"格式读取整数)时,您有未定义的行为并将该整数存储在浮点数中点变量。整数和浮点值不会以相同的格式存储在计算机上。

您需要使用"%lf" scanf格式:

scanf("%lf", &depth);

答案 1 :(得分:0)

编译器应警告您%d不是double的正确格式说明符。对于%lfscanf实际上是正确的%f,而printf可以使用{{1}}。我建议你用上面列出的命令中的一个(或全部)进行编译:

  • -Wall
  • -Wextra
  • -pedantic

您可以找到有关gcc警告here的更多信息。

也可以在这里阅读:

答案 2 :(得分:0)

scanf中的类型不匹配:您指定%d但是指向double的指针,其中scanf需要指向int的指针。< / p>

以这种方式修复代码:

scanf("%lf", &depth);

还有另一个错误,虽然不是致命的:从Celcius转换到Fahrenheit是不正确的,它应该是:

double fahrenheit = 1.8 * celcius + 32;