C中的Scanf双倍没有给出正确的值

时间:2015-11-11 09:37:27

标签: c

我想知道我的错误在哪里。 当将参数扫描为双精度并立即打印(用于检查)时,打印不会给我输入的值。 我试图将它们定义为整数并且它有效,但是对于双打它只是给我这个:a=0.00000b=-0.00000

看看:

#include <stdio.h>
#include <stdbool.h>

int main()
{  
    double a=0,b=0,c=0;

    scanf("%lf",&a);
    scanf("%lf",&b);
    scanf("%lf",&c);

    printf("%lf %lf\n",a,b);

    return 0;
}
编辑:抱歉,我没有包含我的整个代码,这是整个代码,但它仍然给了我同样的东西。

1 个答案:

答案 0 :(得分:3)

按原样编写,您的程序将接受3个浮点值的正确格式化输入,并将打印前两个。

您输入什么值?

您在程序中输入的精确输入是什么?

我怀疑您输入了额外字符:scanf停止扫描无效输入。

您应该测试scanf函数调用的返回值,并验证值是否已实际解析。

顺便提一下,printf参数的double格式为%f,而不是%lf,但这不应该造成问题,因为额外的l最多可能被忽略了。

以下是您应该尝试找出问题所在的更正版本:

#include <stdio.h>

int main(void) {
    double a = 0, b = 0, c = 0;
    if (scanf("%lf", &a) != 1) {
        printf("invalid input for a\n");
    }
    if (scanf("%lf", &b) != 1) {
        printf("invalid input for b\n");
    }
    if (scanf("%lf", &c) != 1) {
        printf("invalid input for c\n");
    }
    printf("a=%f b=%f\n", a, b);
    return 0;
}