1時間ごとに更新!Amazon.co.jpで今売れている本トップ100   掲示板ランキング



掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.5847

自動販売機
投稿者---ohguro(2006/06/19 14:20:47)


自動販売機です。
#include <stdio.h>
#define Max 1000
#define ten 10
#define nm 3
#define two 2
#define one 1
#define zero 0
staic int ap[nm]={ten,ten,ten};
int main(void){
int inp=0,it,is;
char *sp="1000円以上は、入れないでください\n"),ccp="おつりが、切れました";
printf(
while(ap[0]=0 || ap[1]=0 || ap[2]=0){
printf("inp=");scanf("%d",&inp);printf("\n");
if(inp>Max)
is=zero;
while(ap[is]!="\n"){
putchar(ap[is]);
is++;
}
putchar('\n');
continue;
else {
it=zero;
while(inp!=zero){
if(ap[it]>=1){
inp-=ap[it];
ap[it]--;
if(inp<ap[it]) it++;

}
else if(ap[it]==zero) it++;
}
}
printf("おつりは、100円-%d :50円-%d :10自動販売機円-%dです。\n",ap[zero],ap[one],ap[two]);
}
is=zero;
while(ap[is]!="\n"){
putchar(ap[is]);
is++;
}
putchar('\n');
return(0);
}



















この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:自動販売機 5848 nop 2006/06/19 14:35:36
<子記事> Re:自動販売機 5878 円零 2006/06/20 19:25:48


No.5848

Re:自動販売機
投稿者---nop(2006/06/19 14:35:36)


>自動販売機です。

独り言ですか?


この投稿にコメントする

削除パスワード

No.5878

Re:自動販売機
投稿者---円零(2006/06/20 19:25:48)


◇#define ten 10
これは無意味な定数の典型例としてよく例に出されるパターンですね。
定数の名前には役割や意味などを表すものを付けるべきであって、値を名前にするくらいなら「10」のままでも同じです。

◇printfが途中でぶっつり切れてます。
コードを他人に見せる前に、せめてこういう一見しておかしいところは直しておくべきだと思います。

◇spの宣言の後にある閉じ括弧はなんですか?

◇ccpはこの場合char*型として宣言したいのだと思われますが、「*」がありません。

◇ccpはプログラム中一度も使われません。

◇最初のwhileの繰り返し条件で代入を行なっています。
このままですとWhile(0 || 0 || 0)なのでwhileの中身は決して実行されません。

◇対応するifを持たないelseがあります。中括弧の付け忘れでしょうか?

◇ap[is] != "\n" は、int型とchar*型を比較しています。
また、仮に'\n'だとしても、後半のprintfから察するに釣り銭の枚数と思われるapを
改行コードと比較するって、どういう意図に基づくものなのかさっぱりわかりません。

◇putchar(ap[is]); も、意味不明です。
もしもデバッグか何かで変数の値を示したいのであれば、
for(i = 0; i < 3; i++) printf("ap[%d] = %d\n", i, ap[i]); などとすべきでしょう

◇仮にapが「釣り銭」の各コインの枚数だとすれば、10からデクリメントするのはおかしい。
「自動販売機」が持つ「釣り銭」用コインの枚数だとすれば、結果表示のprintfがおかしい。

◇仮にinpが出さなければいけない「釣り銭」の残金とし、apが釣り銭の何らかを表すのなら、
例えばap[0]が100円硬貨に対応しているのであれば、ap[0]が1変化するごとにinpは100変化しなければいけないはず。
というか、100や50といった額面を表す値そのものがどこにも登場してないんですが…
今の状態では、100円硬貨が10枚積んであったとすると、1枚目に10円の価値があり、2枚目には9円の価値が…と処理されます。

◇10円未満の端数に対応していないのに、なんら指示もなく、1円単位で入力できてしまう。

◇恐らくinpがゼロに達する前にiが3に達したら「釣り銭切れ」なんでしょうが、
それを判定する仕組みがどこにもない。

◇else if(ap[it]==0) ap[it]はデクリメントでしかいじってないので
マイナスの場合の処理がないのは構いませんが、そういう場合else〜だけで十分です。

◇printf("おつりは、100円-%d :50円-%d :10自動販売機円-%dです。\n",ap[0], ap[1], ap[2]);
日本語として意味不明です。

◇自動販売機と言いながらモノを買う処理がない。「釣り銭」(とは言えないが)を出すだけ。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ