2015-10-21 82 views
0

我試圖用scanf不斷讀取用戶值doubleScanf不能讀取雙精度值

代碼:

printf("Enter A value: \n"); 
double input; 
int result = scanf("%f", &input); 
printf("INPUT: %f\n", input); 

輸出是

INPUT: 0.000 
+0

爲什麼結果是int而不是double? – Michi

+0

@ user3121023我只是很想知道OP的意圖。 :) – Michi

回答

6

你騙編譯器:當掃描,%f說你提供一個指向float。但是你提供了一個指向double的指針。

要修復,請使用%lf聲明inputfloat

請注意,存在與printf格式不對稱的情況,對於floatdouble兩個參數均使用%f參數。這是有效的,因爲printf參數被提升爲double(並且不是指針)。

2

我試圖讀取一個雙精度值連續從用戶使用scanf。

要做到這一點,你需要一個循環,如下所示:

while(scanf("%lf", &input) == 1) { 
    //code goes here... 
    printf("INPUT: %lf\n", input); 
    //code goes here... 
} 

需要注意的是,由於原始類型的inputdouble,你需要使用,而不是%lf用於float%f%f )。

+0

它應該是'!= EOF'還是'== 1'? –

+0

@FiddlingBits,你是正確的,答案已更新。如果在任何轉換之前發生輸入故障,[scanf返回宏EOF的值。否則,scanf會返回分配的輸入項的數量,如果出現早期匹配故障,則返回的數量可能少於規定的數量,甚至爲零。](http://www.rowleydownload.co.uk/arm/documentation/ ?index.htm的HTTP://www.rowleydownload.co.uk/arm/documentation/scanf.htm) –