#include <stdio.h>
int main()
{
float a = 5;
printf("%d", a);
return 0;
}
這使輸出整數格式字符串:的printf指定浮動
0
爲什麼輸出爲零?
#include <stdio.h>
int main()
{
float a = 5;
printf("%d", a);
return 0;
}
這使輸出整數格式字符串:的printf指定浮動
0
爲什麼輸出爲零?
你必須使用一個不同的格式化字符串,只是看看 http://www.cplusplus.com/reference/clibrary/cstdio/printf/
的printf( 「%F」,一);
它不打印5,因爲編譯器不知道自動轉換爲整數。你需要自己做(int)a
。
也就是說,
#include<stdio.h>
void main()
{
float a=5;
printf("%d",(int)a);
}
正確輸出5.
比較該程序與
#include<stdio.h>
void print_int(int x)
{
printf("%d\n", x);
}
void main()
{
float a=5;
print_int(a);
}
編譯器在其中直接知道到浮子轉換爲int,由於聲明print_int
。
具體而言,它不知道自動轉換爲可變參數函數中的整數,但這對於初學者來說很難解釋,特別是因爲它確實看起來像C編譯器應該知道涉及的類型。 – 2009-10-27 17:18:29
除了可變性之外,知道要轉換什麼類型將需要編譯器解析傳遞給printf的字符串,並推導出a應該是什麼類型。 GCC可以輕鬆處理常量「%d \ n」,並在通過'-Wall'時發出警告,但如果字符串沒有被硬編碼到程序中,祝您好運! – 2009-10-27 19:05:46
@MarkRushakoff合理的程序員不使用非常量格式的字符串,因爲它們引入了一個安全問題。 – 2013-10-20 09:44:25
%d
格式說明符只能用於類型爲int
的值。您傳遞的是double
(其中float
將隱式轉換爲)。結果的行爲是未定義的。沒有答案「爲什麼它打印0?」題。任何東西都可以打印。事實上,任何事情都可能發生。
P.S.
int main
而不是void main
。conio.h
標準C.+1指出printf()傳遞了一個double。我修復了代碼以刪除多餘和不相關的'#include
沒有這樣的標題,您需要使用%F用於打印的浮點值。
如
float a=5;
printf("%f",a);
您應該將它轉換爲int使用%d,或使用格式字符串顯示浮動不帶小數精度:
void main() {
float a=5;
printf("%d",(int)a); // This casts to int, which will make this work
printf("%.0f",a); // This displays with no decimal precision
}
您需要使用%f
而不是%d
- %d
僅用於整數,而%f
用於浮點:
#include<stdio.h>
#include<conio.h>
void main()
{
float a=5;
printf("%f",a);
}
正如其他人所說,您需要在格式字符串中使用%f
或將a
轉換爲int。
但是我想指出你的編譯器可能知道printf()
的格式字符串,並且可以告訴你你錯誤地使用了它。我的編譯器,用適當的調用(-Wall
包括-Wformat
),這樣說:
$ /usr/bin/gcc -Wformat tmp.c
tmp.c: In function ‘main’:
tmp.c:4: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘double’
$ /usr/bin/gcc -Wall tmp.c
tmp.c: In function ‘main’:
tmp.c:4: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘double’
$
哦,還有一兩件事:你應該包括「\ n」在printf()
,保證輸出發送到輸出設備。
printf("%d\n", a);
/* ^^ */
或printf()
使用後fflush(stdout);
。
使用代碼格式。 – Ree 2009-10-27 16:35:02
'#include'因爲不需要而被移除 - 其他清理也一樣。 –
2009-10-27 17:01:43