2016-02-07 79 views
-2

对不起,这一直困扰着我几个小时,没有什么关于这个谷歌出现。我在C编程,试图将十进制转换为二进制,我很困惑,为什么这会一直给我正确的数量作为输入,但整数值始终是0.为什么将这个double赋值给一个int给我0?

即使我正确地投入输入为一个int,它不工作(即:INT整数=(int)的输入; - >scanf()或打印 - 因为你使用了错误的说明符读取

main() { 
double input; 
scanf("%d", &input); 
printf("input: %d \n", input); // this will print fine 
int integer = input;   // stores nums before decimal 
printf("integer:%i\n", integer); // this always prints 0 
+0

你实际上*不*有正确的值作为双。你所拥有的是一个int值,它已经被塞进了一个double变量,因为你使用了错误的scanf格式。然后您尝试再次使用错误的格式进行打印,因此它被解释为一个“int”,并恰好显示您的预期。但是,作为一个“双”,它的价值与你所期望的完全不同(所有这些都是未定义的行为)。提示:修复您的编译器警告。在您的代码编译无警告之前,您不应该发布关于为什么它不起作用的问题。 –

回答

2

>printf()double,做到这一点

if (scanf("%lf", &input) == 1) 
{ 
    printf("input: %f\n", input); 
    printf("integer: %d\n", (int) input); 
} 
1

您需要更正格式说明符。

main(){ 
    double input; 
    scanf("%lf",&input); 
    printf("input: %lf \n", input); 
    int integer = input; 
    printf("integer:%i\n", integer); } 

Some Format Specifiers

或者你可以阅读here

相关问题