

今、ファイル処理などを使わずに、つり銭があるかどうかを判断するプログラムの勉強をしています。
table[].maisuは、ちゃんと構造体を使っています。
おかしなところがあったら、どんなことでも
よいので教えてください!!
turi = 500 - 150;
do{
if(turi>= 500 && table[0].maisu >0 ){
s = turi - 500;
}
else if(turi >=100 &&
table[1].maisu>0 ){
s = turi - 100;
}
else if(turi >=50 &&
table[2].maisu >0 ){
s = turi - 50;
}
else if(turi >=10 &&
table[3].maisu >0 ){
s = turi - 10;
}
else {
printf("つり銭がない\n");
break;
}
}while(s != 0);

No.3ベストアンサー
- 回答日時:
全体の構成があまりよくありません。
do
{
if(500円で支払い可能) 500円(1枚で)支払
else if (100円で支払い可能) 100円(1枚で)支払
else if ( 50円で支払い可能) 50円(1枚で)支払
else if ( 10円で支払い可能) 10円(1枚で)支払
else 釣り銭がない
}
while(釣り銭を払いきるまで)
という流れですね。
まず、
if(turi >= 500 && table[0].maisu > 0 ){
という比較は、「構造体がわかりません」と表明しているようなものです。
これは、
if (turi => table[0].kingaku && table[0].maisu > 0) が正解。
もちろん、
turi - 500; も、 turi - table[0].kingaku; です。
こうすると、全体がループになるのが見えてくると思います。
ループにしない場合、おそらく、「カットアンドペースト」でソフトを書くことになると思いますが、直すべきところが直してなかったりということが多発します。
事実、質問のところのソースと、No.1 の方への補足の内容とは、矛盾していますね。
また、処理は、もっと自然に
while(500円で支払い可能){ 500円で支払い; }
while(100円で支払い可能){ 100円で支払い; }
while( 50円で支払い可能){ 50円で支払い; }
while( 10円で支払い可能){ 10円で支払い; }
if(残り != 0) 釣り銭が足りない
とした方がよいでしょう。
実際には、これをループにして、
for(i = 0; i < tableの数; i++)
while(table[i] の内容で支払い可能)
{ table[i] の内容で支払い処理; }
if (残り != 0) 釣り銭が足りない
としたほうがわかりやすいでしょう。
何かいい感じな気がします。ちょっと、やってみます。
どうも、ありがとうございます。
ちなみに、中間あたりで書かれていたことは、わかっております。500と数字を入れたほうがわかりやすいと思ったのですが、違いますよね。今度から、ちゃんと書きます!
No.2
- 回答日時:
> struct MONEY{
> int kingaku;
> int maisu;
> }table[6];
とすると、つり銭の勘定のたびに残数を減らして"いない"んじゃない?
ごもっともです。ただ、それをやらずともお釣りはでるはず(100枚以上とか)なので、試しているところです
お忙しい中、ありがとうございました!!
No.1
- 回答日時:
table[].maisuの意味がわからんのでコメントできません。
この回答への補足
すみません。
#include <stdio.h>
struct GOODS{
char syouhin[20];
int nedan;
int zaiko;
}data[3];
struct MONEY{
int kingaku;
int maisu;
}table[6];
main(){
int menu;
int botan;
int charge_kin = 0;
int kaimono,t;
int turi=0;
int i = 0;
int w = 0;
int a[6];
/*商品名 金額 在庫*/
struct GOODS data[3]= {
{"1.コーラ" ,120, 0},
{"2.ファンタ" ,120, 5},
{"3.オレンジ" ,150,10},
};
/*硬貨の金額 残数 */
struct MONEY table[6]={
{5000, 10},
{1000, 10},
{500, 50},
{100, 50},
{50, 50},
{10, 0},
};
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSSで特定のテーブルだけに...
-
table表を横に並べる際の間隔指定
-
TABLEのセルの中の文字を行単位...
-
HTML5で、テーブル内tdタグの高...
-
画面サイズを取得し、テーブル...
-
ラインを端から端まで画面いっ...
-
<th>タグを使っても太字にしな...
-
textareaの外側の文字が下付き...
-
HTML フォントの指定
-
テーブルデータを折り返して表...
-
テーブル内のセル間にスペース...
-
HTML tableのセルにtextareaを...
-
<fieldset>タグについて
-
テーブルタグの中にdivを含めて...
-
テーブルのヘッダとボディの幅...
-
テーブルの行を折りたたみたい...
-
テーブルタグのセルの幅の一部...
-
HTMLでテーブルを横に並べる方法
-
cssで、テーブルのtdの中の文字...
-
html でのテキスト結合について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルとテーブルの間隔について
-
CSSで特定のテーブルだけに...
-
テーブル内のセル間にスペース...
-
TABLEのセルの中の文字を行単位...
-
<th>タグを使っても太字にしな...
-
table表を横に並べる際の間隔指定
-
html5のテーブル内でdivのタブ...
-
HTML5で、テーブル内tdタグの高...
-
<fieldset>タグについて
-
HTML tableのセルにtextareaを...
-
tableのcellpadding="0" cellsp...
-
HTMLのテーブルをExcelにCopy&P...
-
ホームページのテキストを折り...
-
(HTML)Tableを任意の位置に置...
-
textareaの外側の文字が下付き...
-
テーブルデータを折り返して表...
-
画面幅に合わせてテーブルのカ...
-
同じ幅指定のつもりなのに、ブ...
-
検索窓の位置を指定する方法
-
HTML フォントの指定
おすすめ情報