2016-09-07 23 views
-1

Iam新增C和我有添加和打印09.3f格式的一些雙打的問題。這是我的代碼:添加2個雙打併打印它們

#include <stdio.h> 

int main(int argc, char **argv) 
{ 
    double d, m, c; 


    scanf("%1f", &d); 

    scanf("%1f", &m); 

    c = d + m; 
    printf("%09.3f\n", c); 


} 

而且我已經輸入兩次scanf但我只能插1號,這是爲什麼? 我從printf的獲得是00000.000

例如:d = 5125和M = 1.256,然後我想C到爲:00006.381

+4

使用'%lf'(不'%1f')與'scanf' –

+0

@AlterMann'double's,謝謝! –

+0

您是否試圖使用','和'.'作爲小數分隔符,其中'd = 5,125和m = 1.256'。我從來沒有遇到一個允許這兩個系統。 – chux

回答

-2

這裏,可能是Scanf輸入緩衝區問題。因此,您可以在scanf中添加space。像,

scanf("%lf", &d); 

scanf(" %lf", &m); 

此外,使用scanf而不是%1f%lf

+5

計算出空白空間會自動丟棄,所以空間不會改變任何東西。 – interjay

+1

@ M.S Chaudhari,它實際上工作謝謝! –

0

不要使用scanf永遠。它是broken-as-specified

使用getline來讀取整行(如果您沒有getline,fgets將會這樣做),然後strtod將其解析爲數字。 (在這種情況下,它可能只strtod做整個工作,但你可能會發現更容易編寫分裂了strsep第一行代碼。如果你沒有strsepstrtok就行了。)

一旦你做了這些改變你的程序應該工作。

+0

感謝您的提示,但我也想用scanf來試試它,問題是我輸入了2個scanf,但它只讀取了一個double。這是爲什麼? –

+0

'scanf'可能是一種特殊和不便的方式,它處理數字和/或回車*之間的空格字符*,其中一個或兩個數字之後,但我實際上並不記得'scanf'如何工作,因爲它太破碎了,唯一值得了解的就是它不應該被使用。 – zwol

+0

感謝您的時間和提示! getline也起作用了,我用scanf –

1

代碼在scanf("%1f", &d);中使用的寬度限制爲1。該數字將用戶輸入限制爲1個非空白字符,然後嘗試將結果保存在float中。結果沒有定義。

一定要啓用所有警告。許多編譯器會警告double d; scanf("%1f", &d);不匹配。

要將輸入保存到double請使用ell l@Alter Mann也一定要檢查結果。

//   ell, not one 
//   v 
if (scanf("%lf", &d) != 1) puts("Number was not entered.");