#include<stdio.h>
int main(void)
{
double c;
scanf("%f", &c);
printf("%f", c);
}
這是我試圖編寫的程序的一個exerpt,但是我遇到了這樣簡單的問題。當我運行這個,並輸入「1.0」時,它打印出「0.007812」。我查看了幾個與我的類似的問題,但找不到合適的答案。scanf正在收集錯誤的輸入
#include<stdio.h>
int main(void)
{
double c;
scanf("%f", &c);
printf("%f", c);
}
這是我試圖編寫的程序的一個exerpt,但是我遇到了這樣簡單的問題。當我運行這個,並輸入「1.0」時,它打印出「0.007812」。我查看了幾個與我的類似的問題,但找不到合適的答案。scanf正在收集錯誤的輸入
您需要使用"%lf"
雙。
這是來自clang編譯器的警告。
警告:格式指定類型 '浮動*' 但參數的類型是 '雙*'[-Wformat] 的scanf( 「%F」,& C);
這裏是scanf reference。它的格式是%[*][width][length]specifier
。 「浮點數」的說明符是f
。所以我們使用%f
來讀取float x
。要閱讀double x
,我們需要指定長度爲l
。組合的格式是%lf
。
你正在觸及最重要的一點。 **在您的編譯字符串中啓用警告**(例如'-Wall -Wextra')並且不接受代碼,直到它編譯*沒有*警告。做得好。 –
「%f」是雙精度格式(或至少一個)。 float沒有格式,因爲如果你嘗試傳遞一個float到printf,它會在printf收到它之前被提升爲double 1。在當前標準下,「%lf」也是可以接受的 - 如果後面跟着f轉換說明符(除其他外),那麼l被指定爲無效。
請注意,這是printf格式字符串與scanf(和fscanf等)格式字符串大不相同的地方。對於輸出,你傳遞一個值,當作爲可變參數傳遞時,該值將從float提升爲double。對於輸入來說,你傳遞的是一個沒有被提升的指針,所以你必須告訴scanf你想讀取一個浮點數還是一個double,所以對於scanf,%f表示你想讀一個浮點數,%lf表示你想要讀取一個double(並且,對於它的價值來說,對於long double,對於printf或scanf使用%Lf)。
您可能需要重新訪問'man scanf'並稍微修改您的答案。 –
the output嘗試%LF代替%F
#include<stdio.h>
int main()
{
double c;
scanf("%lf",&c);
printf("%lf",c);
return 0;
}
你使用什麼是%F,這是用於常規浮動數據類型。 由於您已指定雙,您需要使用%lf,這是很長的浮點數。它讀取一個雙。 希望這可以幫助你。
你有沒有看到有關使用錯誤的格式說明符的雙打? – ThingyWotsit