2014-09-02 53 views
0

下面的代碼似乎給出了不一致的答案,而不是預期的結果,我不知道爲什麼。scanf with formatted float

$ cat chk.c 
#include <stdio.h> 

int main() 
{ 
     float a; 

     scanf("%4.1f", &a); 
     printf("%4.1f\n", a); 

     return 0; 
} 

$ cc chk.c && ./a.out 
12.1 
0.0 
$ 

這沒有正確讀取輸入!任何人都可以解釋這種行爲嗎?我在Linux上嘗試了多個GCC版本,結果相同,並且網絡搜索也沒有用。

+2

精度不屬於'scanf'格式規範的一部分。 – 2014-09-02 02:06:34

+1

第1步:將''\ n'放入'scanf(「%4f \ n」,&a);'這將處理第一個問題。 – chux 2014-09-02 02:07:20

回答

1

如果格式爲scanf的空格,則表示讀取所有字符,直到沒有更多空白爲止。爲了做到這一點,它必須等到輸入的內容不是空白時才顯示,就好像它要求你輸入多個值。使用"\n"並不意味着讀取單個換行符,它表示讀取全部爲空格。

printf格式字符串不同,精度不是scanf格式字符串的一部分,所以scanf僅僅是無法讀取第二個示例中的float值。您最終打印一個未初始化的值,這發生在打印0.0。獲取未初始化變量的值是未定義的行爲,所以它可以做任何事情。