2016-09-15 5 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

を読んでください。なぜシャツ数に' float'が必要ですか?誰かが半分のシャツを買うだろうか? –

答えて

1

あなたは "totalCost"を定義しませんでした。それもフロートであることを確認してください。ところで、あなたがやっていることはちょっと危険です。あなたのscanfに浮動小数点を引っ掛けてしまいます。あなたが誤って手紙を入力すると、プログラムがクラッシュします。 scanfから文字列を受け取り、その内容をチェックして浮動小数点にキャストするか、エラーをユーザに報告する方がよいでしょう。

+1

ユーザーが不正な入力を行った場合、プログラムはクラッシュすることはありません。確かに 'scanf()'はクラッシュしませんが、 'numberOfShirts'の値も設定しません。その変数は初期化されていないので、その値を読み取ると未定義の動作が呼び出されます。おそらくそれは奇妙な出力として現れるでしょう。 –

+0

この回答が投稿された後、質問に「float」タイプが(OPによって)追加されたことに注意してください。しかし、引数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_問題があります。 IMO、 'double 'に' float'を使用すると状況が悪化します。 – chux

+2

あなたは正しいかもしれません。しかし、この例はOPの最初のCプログラムの1つであり、浮動小数点数としてのモデリングで生じる問題よりも、Cプログラミング言語の一般的な構造と基本的な型に関するものです。 – tnull

+0

'18.95f'、' float totalCost'、 'printf("%f "、totalCost);を使うことで、なぜ1シャツが' 18.95'ではなく '18.950001'になるのかを学習者に説明することができます。コードが 'double'を使用していた場合、その問題は後日保存される可能性があります。 – chux

関連する問題