• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語初心者です。計算がうまく出来ず困っています。)

C言語初心者の質問:割引計算のプログラムが正しく動作しない

このQ&Aのポイント
  • C言語初心者が割引計算のプログラムを作成しましたが、正しく動作しません。
  • プログラムを実行すると、「0, 0, 0, 0」と表示されてしまいます。
  • 解答のサンプルコードと比較しても間違いが見つからず、どこが間違っているのか分かりません。助言をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kawais070
  • ベストアンサー率52% (2242/4283)
回答No.1

one = price*0,9; three = price*0,7; five = price*0,5; eight = price*0,2; 0,9 じゃなくて、0.9 「 , 」カンマと「 . 」ピリオドじゃ全然違うからね。

libereso
質問者

お礼

回答の通りに直して無事動きました!焦って入力したせいで間違えてしまったみたいです。こんなミスをしていて本当に恥ずかしいです。これからは気をつけます。

libereso
質問者

補足

迷いましたが、一番最初に解決策の回答を頂きましたので、こちらの回答をベストアンサーに選ばせていただきます。本当にありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (5)

回答No.6

因みに、式の中の「カンマ」を「カンマ演算子」って呼ぶ。 カンマ演算子は、例えば int i,j,k; for (i = 0 , j = 10 , k = 100;i < 10;i++ , j--, k += 10) { 何かの処理 } みたいに使う。 こういう書き方を許しているので one = price * 9,0; もエラーにならないのだ。

すると、全ての回答が全文表示されます。
回答No.5

one = price*0,9; three = price*0,7; five = price*0,5; eight = price*0,2; カンマとピリオドが違う。 one = price*0,9; この式は、priceに0を掛けてoneに代入して、その後、9を評価して捨てる。 three = price*0,7; five = price*0,5; eight = price*0,2; も、すべて同様に、priceに0を掛けた結果、つまり「0」を、それぞれの変数に代入する。そして、カンマのあとに続く「7」とか「5」とか「2」とかは、評価された後に捨てられる。 なので、ゼロが4つ表示されて当然。 priceに何が入ってようが、0を掛けたら0になるからな。 C言語は one = 1 , 2 , 3 , 4 , 5 , 6 , two = 7 , 8 , 9; と言う書き方も可能なのだ。 カンマで区切られた式は、それぞれが評価され、副作用があれば、その副作用が実行されるし、代入先がなければ評価だけ行って捨てられるのだ。

libereso
質問者

お礼

2つに渡ってとても詳しい回答をくださり本当にありがとうございます。他に回答が付いてからここまで詳しく解説していただけると思わなかったので驚いています。自分が書いた誤った式で何が起こっていたのか良く分かりました。

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

使っている処理系によっては, 警告レベルを最大にすれば何か出るかもね.

libereso
質問者

お礼

サイトで配布されている「学習用C言語開発環境」を使っていますが、特にそういった設定はないようです。他の環境を使う場合には意識してみます。

すると、全ての回答が全文表示されます。
  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.3

one = price*0,9; の「,」を「.」に変更する。 その他3か所も同様。 なぜ「,」で翻訳エラーが発生しないのか? また一つ勉強の種ができましたね。

libereso
質問者

お礼

回答の通りに直して無事動きました!焦って入力したせいで間違えてしまったみたいです。こんなミスをしていて本当に恥ずかしいです。何でこんなミスをしているのにエラーが発生せず動くのか、まだ勉強不足なので不思議に感じます。回答頂けなかったら気づけませんでした。本当にありがとうございます。

すると、全ての回答が全文表示されます。
  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.2

>one = price*0,9; oneが整数型なので、price*0.9を計算した結果を代入したときに小数点以下を切り捨てます。 小数を保持するためには変数を実数型にしましょう。

libereso
質問者

お礼

答えの単位が円で整数なので、迷ってしまいました。このまま実行すると正確でない値が出てしまったので、修正してみます。ありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A