![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
「苦しんで覚えるC言語」というサイトに載っている以下の問題を解きたいのですが、プログラムにエラーは出ないものの正常な結果が出ません。
定価を入力すると、1割引、3割引、5割引、8割引の値段を一覧表示するプログラムを作成せよ。
なお、結果の金額は整数値での表示が望ましいが、実数でもかまわない。
私は以下のようにプログラムを書いたのですが、実行して数値を入力すると、「0 ,0 ,0 ,0」と表示されてしまいます。
#include <stdio.h>
int main(void)
{
int price,one,three,five,eight;
scanf("%d",&price);/* 入力部分 */
one = price*0,9;
three = price*0,7;
five = price*0,5;
eight = price*0,2;
printf("%d ,%d ,%d ,%d \n",one,three,five,eight);
return 0;
}
サイトでの解答は以下のようになっており、解答の他にも、変数を使用して書いても良いとあります。
#include <stdio.h>
int main(void)
{
int price;
printf("定価を入力して下さい : ");
scanf("%d",&price);
printf("1割引 = %d円\n",(int)(price * 0.9));
printf("3割引 = %d円\n",(int)(price * 0.7));
printf("5割引 = %d円\n",(int)(price * 0.5));
printf("8割引 = %d円\n",(int)(price * 0.2));
return 0;
}
これより前の内容を復習したり、調べたりもしたのですが、自分ではどこに間違いがあるのか見つけられませんでした。非常に初歩的な内容で恐縮ですが、助言をお願いします。
No.1ベストアンサー
- 回答日時:
one = price*0,9;
three = price*0,7;
five = price*0,5;
eight = price*0,2;
0,9 じゃなくて、0.9
「 , 」カンマと「 . 」ピリオドじゃ全然違うからね。
この回答への補足
迷いましたが、一番最初に解決策の回答を頂きましたので、こちらの回答をベストアンサーに選ばせていただきます。本当にありがとうございました。
補足日時:2014/02/27 15:44回答の通りに直して無事動きました!焦って入力したせいで間違えてしまったみたいです。こんなミスをしていて本当に恥ずかしいです。これからは気をつけます。
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;
と言う書き方も可能なのだ。
カンマで区切られた式は、それぞれが評価され、副作用があれば、その副作用が実行されるし、代入先がなければ評価だけ行って捨てられるのだ。
2つに渡ってとても詳しい回答をくださり本当にありがとうございます。他に回答が付いてからここまで詳しく解説していただけると思わなかったので驚いています。自分が書いた誤った式で何が起こっていたのか良く分かりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
- C言語・C++・C# 至急教えてください! プログラミングの問題です! お願いします! 出力2と全く同じ出力をするように、 2 2022/06/22 23:10
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# C言語初心者です、、、お助けください 2 2023/03/14 20:08
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TCP/IP: 非ソケットに対するソ...
-
Expression: nptr != NULL
-
'printf':識別子が見つかりませ...
-
C言語のエラーについて
-
加減剰余のオーバーフローについて
-
C言語初心者です。計算がうまく...
-
第5調波や第3高調波って何です...
-
クレーンでのCFブレーキとな...
-
互いに素と負の数
-
一次遅れ系の制御における時定...
-
動揺装置は自作できますか?
-
モータの巻線係数って何でしょ...
-
反転増幅回路の周波数特性の理論値
-
SPI 非言語の問題です
-
SPI 非言語 教えてください
-
双安定マルチバイブレータについて
-
整合フィルタ(matched filter)...
-
数学の参考書に 「y=8x」は「y...
-
数学Aの問題です。 答えは、左...
-
交流、パルス波、バースト波
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語プログラミングで初項を1....
-
Expression: nptr != NULL
-
C言語のエラーについて
-
プログラミングが分かりません。
-
C言語 コンパイルエラー(文字...
-
C言語初心者です。計算がうまく...
-
C言語で自作ヘッダーを作ったの...
-
C言語のソースコードについて教...
-
加減剰余のオーバーフローについて
-
分割コンパイルの手順と方法に...
-
プログラムがエラーが出る原因
-
'printf':識別子が見つかりませ...
-
C言語:2つの複素数(分数)の四...
-
TCP/IP: 非ソケットに対するソ...
-
getch / putch用のヘッダ
-
doubleからintへのキャスト
-
コンソールAPIのSetConsoleScre...
-
3×3のラテン方陣をつくるプログ...
-
リターンキー又は、スペースキ...
-
コンパイルエラー (超初心者...
おすすめ情報