比较C中的双精度值

比较C中的双精度值,c,visual-studio-6,C,Visual Studio 6,为什么即使输入值999999,它也总是转到else语句?有人能解释一下为什么,正确的方法是什么吗 #include <stdio.h> int main(int argc, char **args) { double dValue = 0; scanf("%d",&dValue); if(10000 < dValue){ printf("More than"); } else { printf

为什么即使输入值999999,它也总是转到else语句?有人能解释一下为什么,正确的方法是什么吗

#include <stdio.h>

int main(int argc, char **args)
{
    double dValue = 0;

    scanf("%d",&dValue);

    if(10000 < dValue){
            printf("More than");
    } else {
        printf("Less than");
    }

    return 0;
}
#包括
int main(int argc,char**args)
{
双D值=0;
scanf(“%d”和&d值);
如果(10000
如果要以整数形式读入值(使用
%d”
),则应将其声明为
int
。如果您打算将该值读入为
double
,则应改为使用
%lf
作为scanf格式说明符。

scanf
调用中尝试
%f
%g
%d
%lf
,打开编译器警告。
%d
并不意味着
double
。这意味着十进制转换为
int
@wallyk,谢谢。已更改为%lf,效果良好。但是我打印了dValue的值,它仍然打印99999的值。为什么我在if语句中尝试比较它时,它仍然是错误的,即将999999与另一个int值进行比较?@Azuan:输入99999或999999,程序将打印“小于”?这就是你说的吗?改为%lf,效果很好。但是我打印了dValue的值,它仍然打印99999的值。在if语句中比较99999与另一个int值时,为什么它仍然是错误的?@Azuan您是如何尝试打印
dValue
?我使用%d打印值,因为我使用%d扫描。假设我使用与上面相同的代码。然后我输入999999。为什么它仍然跳过if语句?10000<999999不应该是真的吗?@Azuan说得很清楚,你说你已经修复了这个bug,声明了
dValue
int
,使用
%d”
scanf
,输入一个大于10000的数字,你看到了
分支,如果执行了
条件,那么实际上没有。我使用了与上面相同的代码,这意味着我还没有修复这个bug。然后我输入大于10000的数字,但它仍然转到'else'语句