• 締切済み

つり銭のプログラムについて

今、ファイル処理などを使わずに、つり銭があるかどうかを判断するプログラムの勉強をしています。 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) 釣り銭が足りない としたほうがわかりやすいでしょう。

code55
質問者

お礼

何かいい感じな気がします。ちょっと、やってみます。 どうも、ありがとうございます。 ちなみに、中間あたりで書かれていたことは、わかっております。500と数字を入れたほうがわかりやすいと思ったのですが、違いますよね。今度から、ちゃんと書きます!

回答No.2

> struct MONEY{ >  int kingaku; >  int maisu; > }table[6]; とすると、つり銭の勘定のたびに残数を減らして"いない"んじゃない?

code55
質問者

お礼

ごもっともです。ただ、それをやらずともお釣りはでるはず(100枚以上とか)なので、試しているところです お忙しい中、ありがとうございました!!

回答No.1

table[].maisuの意味がわからんのでコメントできません。

code55
質問者

補足

すみません。 #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