2016-09-15 57 views
-1

我正在嘗試編寫一個簡單的C程序來模擬使用固定常量的價格的購物體驗,然後要求用戶輸入他們想要的數量採購。然後乘以金額和價格,以獲得總成本。使用浮點常量和變量的'printf'參數1的不兼容類型

#define TSHIRT 18.95f 
//TSHIRT is a constant float for a fixed price on the cost of a t-shirt 

int main(void) { 
    float numberOfShirts; 
    printf("How many T-Shirts would you like?"); 
    fflush(stdout); 
    scanf("%f", &numberOfShirts); 
    printf("You will receive %f shirt(s)", numberOfShirts); 
    fflush(stdout); 

    //This gets the user's amount of shirts they'd like to buy 

    float totalCost = (numberOfShirts * TSHIRT); //Edit: float totalCostadded 
    printf("%f", totalCost); 

    //this is supposed to be the total cost (amount * price) and print it, 
    //but I get an error -- "incompatible type for argument 1 of 'printf ". 

我該如何修復它或獲得正確的類型以使其工作?

+2

'totalCost'聲明未過帳。問題在其聲明中喜歡。試試'double totalCost =(numberOfShirts * TSHIRT);' – chux

+1

另外,請閱讀[MCVE] – Serge

+2

爲什麼襯衫的數量需要一個「浮動」?有人會買半件襯衫嗎? –

回答

1

您沒有定義「totalCost」。確保這也是一個浮動。順便說一句,你在做什麼有點冒險,在你的scanf中捕捉一個浮點數,如果用戶意外地輸入了一個字母,你的程序就會崩潰。更好的做法是從scanf接收一個字符串,然後檢查其內容並將其轉換爲浮動狀態,或向用戶報告錯誤。

+1

如果用戶提供錯誤的輸入,程序不一定會崩潰。當然'scanf()'不會崩潰,但它也不會設置'numberOfShirts'的值。該變量未被初始化,因此隨後讀取其值會引起未定義的行爲。更有可能不會表現爲奇怪的輸出。 –

+0

請注意,在發佈這個答案之後,(通過OP)將「float」類型添加到問題中。然而,它似乎並沒有解決麻煩,這是關於參數1(格式字符串)到'printf()'函數的類型。 –

0

您的代碼中存在各種錯誤:您沒有聲明變量totalCost,聲明它爲float可修復您的類型問題。 您還需要包含stdio.h,並且缺少一個右大括號。 此版本適用於我:

#include <stdio.h> 
#define TSHIRT 18.95f 
//TSHIRT is a constant float for a fixed price on the cost of a t-shirt 

int main(void) { 
    float numberOfShirts; 
    printf("How many T-Shirts would you like?"); 
    fflush(stdout); 
    scanf("%f", &numberOfShirts); 
    printf("You will receive %f shirt(s)",numberOfShirts); 
    fflush(stdout); 

    //This gets the user's amount of shirts they'd like to buy 

    float totalCost = (numberOfShirts * TSHIRT); 
    printf("%f", totalCost); 
} 
+1

錢和二進制浮點有_many_問題。國際海事組織,在'double'上使用'float'使事情變得更糟。 – chux

+2

你可能是對的。然而,看起來這個例子是OPs第一個C程序之一,而問題是關於C語言的一般結構和基本類型,而不是將貨幣建模爲浮點數的問題。 – tnull

+0

通過使用'18.95f','float totalCost'和'printf(「%f」,totalCost);'現在可以向學習者解釋爲什麼1件襯衫產生'18.950001'而不是'18.95'。如果代碼使用了'double',那麼這個問題可以在以後保存。 – chux

相關問題