質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

1085閲覧

出力が思いとおりに行きません

Teemro_431265

総合スコア29

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/07/14 12:35

自販機のプログラムを作っているのですが入力をした後の出力が思い通りになってくれません。

例(こうなるはず)
1(○)130
2(○)120
3(○)200
4(○)80
5(○)150
6(○)110
釣銭切れ(○)
お金と飲み物番号を入力してください
1000の数 500の数 100の数 50の数 10の数 飲み物番号
0 0 2 0 0 1
ー状態表示エリアー
飲み物1が出ます
お釣り
150
2
10
が出ます

実際の出力結果
1(○)130
2(○)120
3(○)200
4(○)80
5(○)150
6(○)110
釣銭切れ(○)
お金と飲み物番号を入力してください
1000の数 500の数 100の数 50の数 10の数 飲み物番号
0 0 2 0 0 1
ー状態表示エリアー
つり銭切れです
お金200円が戻ります

c

1#include<stdio.h> 2int main(){ 3 4 int price[7]={0,130,120,200,80,150,110}; 5 int stock[7]={0,3,5,10,4,8,6}; 6 int i,take; 7 int coin[4]={10,10,10,10}; 8 int hideo1000,in1000,in500,in100,in50,in10; 9 int c500=0,c100=0,c50=0,c10=0; 10 int ex,exc,payoff=0,num; 11 int issue[6]={0,0,0,0,0,0}; 12 int spare=0; 13 int in[4]={0,1,2,3}; 14/* 15priceは各ドリンクの金額 16stockは各ドリンクの残り個数 17iはカウント変数 18coinは各コインの枚数 19hideo1000は1000円札の枚数 20in1000は各コインが購入時に入れられた枚数を入れる箱 21c500は各コインが実際に購入時に入れられた枚数 22exはお釣り(プログラミング内で変わる) 23excはお釣り(定数) 24payoffは総売り上げ金額 25numは購入したドリンク番号 26issueは各ドリンクが売れた個数 27takeはその回に売り上げた金額 28spareはつり切れの場合を判定するための変数 29*/ 30 while(1){ 31 32 for(i=1;i<=6;i++){ 33 if(stock[i]>0){ 34 printf("%d(○)%d\n",i,price[i]); 35 } 36 else{ 37 printf("%d(×)%d\n",i,price[i]); 38 } 39 } 40 41 for(i=0;i<=3;i++){ 42 if(in[i]<=5){ 43 spare=1; 44 } 45 } 46 if(spare==1){ 47 printf("釣銭切れ(○)\n"); 48 } 49 else{ 50 printf("釣銭切れ(×)\n"); 51 } 52 53 printf("お金と飲み物番号を入力してください\n"); 54 55 printf("1000の数 500の数 100の数 50の数 10の数 飲み物番号\n"); 56 57 if(scanf("%d %d %d %d %d %d",&in1000,&in500,&in100,&in50,&in10,&num)==EOF)break; 58 59 printf("ー状態表示エリアー\n"); 60 61 if(!((num==1)||(num==2)||(num==3)||(num==4)||(num==5)||(num==6))){ 62 63 printf("存在しない飲み物番号です\n"); 64 65 printf("お金%d円が戻ります\n\n",1000*in1000+500*in500+100*in100+50*in50+10*in10); 66 67 continue; 68 } 69 if(stock[num]==0){ 70 71 printf("飲み物%dは売り切れです\n",num); 72 73 printf("お金%d円が戻ります\n",1000*in1000+500*in500+100*in100+50*in50+10*in10); 74 75 printf("\n"); 76 continue; 77 } 78 79 else if(1000*in1000+500*in500+100*in100+50*in50+10*in10<issue[num]){ 80 81 printf("投入金額が足りません\nお金%d円が戻ります\n",1000*in1000+500*in500+100*in100+50*in50+10*in10); 82 83 printf("\n"); 84 continue; 85 } 86 87 else if(spare==1){ 88 89 if(1000*in1000+500*in500+100*in100+50*in50+10*in10==price[num]){ 90 91 printf("飲み物%dが出ます\n",stock[num]); 92 93 printf("お釣りはありません\n"); 94 stock[num]=stock[num]-1; 95 continue; 96 } 97 else{ 98 printf("つり銭切れです\n"); 99 100 printf("お金%d円が戻ります\n",1000*in1000+500*in500+100*in100+50*in50+10*in10); 101 102 printf("\n"); 103 continue; 104 } 105 } 106 107 else{ 108 stock[num]-=1; 109 110 ex=(1000*in1000+500*in500+100*in100+50*in50+10*in10)-coin[num]; 111 112 exc=ex; 113 114 spare=coin[num]; 115 116 if(ex-500>=0){ 117 c500++; 118 119 ex-=500; 120 } 121 while(1){ 122 if(ex-100>=0){ 123 124 c100++; 125 126 ex-=100; 127 } 128 else break; 129 } 130 131 while(1){ 132 133 if(ex-50>=0){ 134 135 c50++; 136 137 ex-=50; 138 } 139 else break; 140 } 141 142 c10=ex/10; 143 144 if(exc>0){ 145 146 printf("飲み物%dが出ます\nお釣り\n",num); 147 148 if(c500>0){printf("%d*500円\n",c500);} 149 150 if(c100>0){printf("%d*100円\n",c100);} 151 152 if(c50>0){printf("%d*50円\n",c50);} 153 154 if(c10>0){printf("%d*10円\n",c10);} 155 156 printf("が出ます\n"); 157 printf("\n"); 158 159 stock[num]-=1; 160 } 161 else{ 162 163 printf("飲み物%dが出ます\n",num); 164 printf("お釣りはありません\n"); 165 printf("\n"); 166 stock[num]-=1; 167 } 168 169 in[0]=in[0]+in500-c500; 170 in[1]=in[1]+in100-c100; 171 in[2]=in[2]+in50-c50; 172 in[3]=in[3]+in10-c10; 173 issue[num]+=1; 174 take+=payoff; 175 hideo1000+=in1000; 176 } 177 } 178 179 180printf("ー売り上げサマリー\n"); 181 182printf("売れた飲み物の番号毎の個数\n"); 183 184printf("1:%d\n2:%d\n3:%d\n4:%d\n5:%d\n6:%d\n",issue[0],issue[1],issue[2],issue[3],issue[4],issue[5]); 185 186printf("\n"); 187 188printf("総売上額\n%d円\n",payoff); 189 190printf("\n"); 191 192printf("各金種毎の保有枚数\n1000円:%d\n500円:%d\n100円:%d\n50円:%d\n10円:%d\n",hideo1000,in[0],in[1],in[2],in[3]); 193 194 195return 0; 196} 197

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

机上デバックでもこの程度なら、なんとかなりますね。

最初の方にある

if (in[i]<=5) spare=1;

ここで、in[] を見ていますが、in[] とはなんでしょう? 初期値を見る限り、常に 真 となり、spare=1 となります。(従って、釣銭無し)
で、釣銭無しの判定は、spare==1 の場合、入力金額に一致しない限り、釣銭無し。

あと、目についたところで、

else if(1000in1000+500in500+100in100+50in50+10*in10 < issue[num]){

issue[] は売れた個数なので、比較が正しいか?

ex=(1000in1000+500in500+100in100+50in50+10*in10)-coin[num];

ここで何しているか不明。

spare=coin[num];

spareは、釣銭無しフラグと思ったが何を代入しているか?

とりあえず、ここまで。

投稿2018/07/15 00:38

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Teemro_431265

2018/07/15 01:10

ありがとうございます。できそうになったのであとは頑張ろうと思います。
guest

0

VisualStudioとか、Eclipseとか、C言語をソースコードのままデバッグできる統合開発環境があるんで、そう言うのでデバッグすればどうでしょう。
これからずっと、組むコードが上手く動かないからと言って、自分のコードのデバッグを他人に頼むわけにもいかないでしょう


if(1000*in1000+500*in500+100*in100+50*in50+10*in10==price[num]){

投入金額が、モノの値段にピッタリ一致しないとこのif文には入りませんねー

投稿2018/07/14 13:08

編集2018/07/14 13:17
y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Teemro_431265

2018/07/14 22:36

すみません、頑張ります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問