2014-11-08 18 views
1

爲int我有這樣的代碼:雙在C

#include <stdio.h> 

int main() 
{ 
    double d = 10; 
    int x = 5; 

    x = (int) d + x; 
    d = (double)x + d; 

    printf("%lf\n" , d); 
    printf("%d\n" , x); 
} 

的出來說就是:

-0.0000 
15 

這是爲什麼對於int而不是double工作? 如何使這項工作?

+0

確定嗎?當我運行這個時,我得到了25.000000和15 – abligh 2014-11-08 15:31:47

+0

你給了我們程序的輸出。但爲什麼這個輸出是錯誤的?你期望它是什麼?你爲什麼期望它是那樣的? – 2014-11-08 15:43:11

回答

4

在C89使用%f格式specifer打印double值。對於較新的標準,您可能使用%lf,在這種情況下l不起作用(它是爲了與scanf()對稱而引入的),但它只是要求麻煩,因爲它在以前的標準中未定義。

#include <stdio.h> 

int main(void) 
{ 
    double d = 10; 
    int x = 5; 

    x = (int) d + x; 
    d = (double)x + d; 

    printf("%f\n", d); 
    printf("%d\n", x); 

    return 0; 
} 

請注意,在C89中,您可能應該添加return 0;。與C99/C11 return 0;在省略時隱式添加(除了直接在main()中調用exit()函數,也適用於此)。

+0

不應該'%lf'和'%f'是相同的(因爲'float' /'%f'在可變參數函數中被提升爲'double' /'%lf'或者是一個非標準擴展? – 2014-11-08 15:36:21

+3

'printf'中的'%lf'與'%f'相同,至少從C99。 – 2014-11-08 15:36:54

+0

你是對的,但不應該是%lf? – 2014-11-08 15:39:51

0

工作正常,我

http://ideone.com/YBfHau

#include <stdio.h> 

int main() 
{ 
    double d = 10; 
    int x = 5; 

    x = (int) d + x; 
    d = (double)x + d; 

    printf("%lf\n" , d); 
    printf("%d" , x); 
return 0; 

} 

編輯:記得添加return 0

+0

運行時錯誤,因爲缺少'return 0;'。 – Simon 2014-11-08 15:33:59

+0

啊,傻了。謝謝 – 2014-11-08 15:35:15

+0

它在Visual Studio中工作,但不在代碼中:block(program) – 2014-11-08 15:35:55