2017-02-11 88 views
1

我遇到一個小問題,我正在處理的程序中,我不斷收到警告format '%1f' expects type 'float *' but argument 2 has type 'double *'所以我相當確定這是我的scanf格式的問題。scanf格式警告雙重

我試過尋找一個解決方案,但似乎無法找到一個。

該函數讀入兩個數字。

void read(double *n1, double *d1) 
{ 
    printf("Enter the number n1: "); 
    scanf("%1f", n1); 
    printf("Enter the number d1: "); 
    scanf("%1f", d1); 
} 
+1

雙您想'%lf'。不是'%1f'。 (但很容易錯過這個區別!) –

+1

使用'「%lf」'(即「long float」)雙重 –

回答

2

使用scanf("%lf", n1)代替double;注意「l」(el,而不是「one」)。 如果您不熟悉編程,請嘗試熟悉文檔,例如cppreference。例如,您會發現格式和長度的矩陣指定爲scanf

與學習編程的樂趣,使用谷歌等,不要猶豫,問:-)

+0

謝謝你的友好態度! – Dustynana

1

使用%lf雙數據類型的格式說明符。

+1

我現在看到了,我覺得很愚蠢。一直在這個工作了一個小時。對編程還是比較新的。謝謝 – Dustynana

2

你犯了一個錯字,然後你複製了......

scanf("%1f", n1); 

應寫入

scanf("%lf", n1); 

l(小寫的L)和1(一把手)之間的差異。

%lf代表長浮動,這是不實際的C型,但一個方法來區分float%f)和double%lf)。 l可以與di一起使用以指定long intu代表long unsigned int

這些字符是難以區分,尤其是與用於編程固定間距的字體,因爲這個原因,應避免命名可變lll等,並且long整數常數1l應寫入1L

+0

哇,太簡單了。謝謝! – Dustynana

1

使用正確的格式說明它們各自的數據類型

  • float %f
  • double %lf
  • int %d%i
  • unsigned int %u
  • char %c
  • char * %s
  • long int %ld
  • long long int %lld