電子書籍の厳選無料作品が豊富!

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

A 回答 (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) 釣り銭が足りない

としたほうがわかりやすいでしょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/30 22:20

> struct MONEY{


>  int kingaku;
>  int maisu;
> }table[6];

とすると、つり銭の勘定のたびに残数を減らして"いない"んじゃない?
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/01/30 22:23

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},
};

補足日時:2006/01/29 23:39
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!