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

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

ただいまの
回答率

90.53%

  • C

    3657questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 116

Teemro_431265

score 15

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

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

#include<stdio.h>
int main(){

  int price[7]={0,130,120,200,80,150,110};
  int stock[7]={0,3,5,10,4,8,6};
  int i,take;
  int coin[4]={10,10,10,10};
  int hideo1000,in1000,in500,in100,in50,in10;
  int c500=0,c100=0,c50=0,c10=0;
  int ex,exc,payoff=0,num;
  int issue[6]={0,0,0,0,0,0};
  int spare=0;
  int in[4]={0,1,2,3};
/*
priceは各ドリンクの金額
stockは各ドリンクの残り個数
iはカウント変数
coinは各コインの枚数
hideo1000は1000円札の枚数
in1000は各コインが購入時に入れられた枚数を入れる箱
c500は各コインが実際に購入時に入れられた枚数
exはお釣り(プログラミング内で変わる)
excはお釣り(定数)
payoffは総売り上げ金額
numは購入したドリンク番号
issueは各ドリンクが売れた個数
takeはその回に売り上げた金額
spareはつり切れの場合を判定するための変数
*/
  while(1){

    for(i=1;i<=6;i++){
      if(stock[i]>0){
          printf("%d(○)%d\n",i,price[i]);
      }
      else{
           printf("%d(×)%d\n",i,price[i]);
      }
    }

    for(i=0;i<=3;i++){
      if(in[i]<=5){
          spare=1;
      }
    }
    if(spare==1){
      printf("釣銭切れ(○)\n");
    }
    else{
      printf("釣銭切れ(×)\n");
    }

    printf("お金と飲み物番号を入力してください\n");

    printf("1000の数 500の数 100の数 50の数 10の数 飲み物番号\n");

    if(scanf("%d %d %d %d %d %d",&in1000,&in500,&in100,&in50,&in10,&num)==EOF)break;

    printf("ー状態表示エリアー\n");

    if(!((num==1)||(num==2)||(num==3)||(num==4)||(num==5)||(num==6))){

      printf("存在しない飲み物番号です\n");

      printf("お金%d円が戻ります\n\n",1000*in1000+500*in500+100*in100+50*in50+10*in10);

      continue;
    }
    if(stock[num]==0){

      printf("飲み物%dは売り切れです\n",num);

      printf("お金%d円が戻ります\n",1000*in1000+500*in500+100*in100+50*in50+10*in10);

      printf("\n");
      continue;
    }

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

      printf("投入金額が足りません\nお金%d円が戻ります\n",1000*in1000+500*in500+100*in100+50*in50+10*in10);

      printf("\n");
      continue;
    }

    else if(spare==1){

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

        printf("飲み物%dが出ます\n",stock[num]); 

        printf("お釣りはありません\n");
        stock[num]=stock[num]-1;
        continue;
      }
      else{
        printf("つり銭切れです\n");

        printf("お金%d円が戻ります\n",1000*in1000+500*in500+100*in100+50*in50+10*in10);

        printf("\n");
        continue;
      }
    }

    else{
      stock[num]-=1;

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

      exc=ex;

      spare=coin[num];

      if(ex-500>=0){
         c500++;

          ex-=500;
      }
      while(1){
       if(ex-100>=0){

         c100++;

         ex-=100;
    }
      else break;
      }

      while(1){

       if(ex-50>=0){

      c50++;

      ex-=50;
    }
       else break;      
      }

      c10=ex/10;

      if(exc>0){

        printf("飲み物%dが出ます\nお釣り\n",num);    

      if(c500>0){printf("%d*500円\n",c500);}

      if(c100>0){printf("%d*100円\n",c100);}

      if(c50>0){printf("%d*50円\n",c50);}

      if(c10>0){printf("%d*10円\n",c10);}

      printf("が出ます\n");
      printf("\n");

      stock[num]-=1;
      }
      else{

        printf("飲み物%dが出ます\n",num); 
        printf("お釣りはありません\n");
        printf("\n");
        stock[num]-=1;
      }

      in[0]=in[0]+in500-c500;
      in[1]=in[1]+in100-c100;
      in[2]=in[2]+in50-c50;
      in[3]=in[3]+in10-c10;
      issue[num]+=1;
      take+=payoff;
      hideo1000+=in1000;
    }
  }


printf("ー売り上げサマリー\n");

printf("売れた飲み物の番号毎の個数\n");

printf("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]);

printf("\n");

printf("総売上額\n%d円\n",payoff);

printf("\n");

printf("各金種毎の保有枚数\n1000円:%d\n500円:%d\n100円:%d\n50円:%d\n10円:%d\n",hideo1000,in[0],in[1],in[2],in[3]);


return 0;
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

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

最初の方にある

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

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

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

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

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

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

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

spare=coin[num];

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

とりあえず、ここまで。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/15 10:10

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

    キャンセル

+1

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


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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/15 07:36

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

    キャンセル

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

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    【C言語の質問です】数値を貨幣単位に分解するプログラムの作成・・

    *たくさんの方よりご指摘をいただけてとてもありたいです。  引き続き、よろしくお願い致します。 C言語を勉強している初心者のものです。 今課題をいただき、その作成をし

  • 解決済

    C++ ポインタについて

    前提・実現したいこと 申し訳ありません。 下記の実行を再度したところ、コンパイルエラーがでず成功しました。 ご協力してくださった方、ありがとうございます。 C++を学習

  • 解決済

    [java]送料を算出するプログラムを作成

    こんにちは。 独学でjavaを勉強しております。 今、表題の問題を解いているのですが、 壁にぶつかってしまいました。 下記のソースのpriceがreturnできず、

  • 解決済

    ファイルから読み込み集計する方法

    A:100 B:200 C:300 A:130 B:210 C:330 のようなファイルを読み込み合計を出力するにはどうしたらいいでしょうか? A:230 B:410 C

  • 受付中

    解決策が分かりません・・・

    5人の点数をキーボードから読み込んで、合計点、平均点、最高点、最低点を表示したいのですが(点数は0以上100以下)、 実行例 5人の点数を入力してください。 1番:95 2

  • 解決済

    PHPで、配列の集計に関する質問です。

    PHPで、配列の集計に関する質問です。 array(3) { [0]=> array(3) { ["id"]=> string(1) "3"

  • 受付中

    ガチャシステムを作りたい。

    【やりたい事】 ゲームで何らかの方法をCoinを獲得する。 ガチャボタンを押してガチャを回す └※コインが足りないときはポップアップをだす。 ガチャを回せたら

  • 解決済

    fgetsを使った文字列の分割

    前提・実現したいこと AOJ 1_5Aの問題で、よくないとされるscanf以外を使用した解決を図りたいです。 問題内容は、 トランプの枚数が足りないので現在持っているカードを入

同じタグがついた質問を見る

  • C

    3657questions

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