• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:銀行のATMを想定したプログラム)

銀行のATMを想定したプログラムのエラーについて

このQ&Aのポイント
  • 銀行のATMを想定したプログラムで、'型' の前に';'がないという構文エラーが発生しています。
  • メニュー画面を表示するユーザ関数と番号を入力した場合の処理を作成し、main関数から呼び出すことで解決できます。
  • また、お預け入れ、残高照会、お引き出しの処理が実装されていますが、メニューの入力番号が4の時にプログラムが終了するようになっています。

質問者が選んだベストアンサー

  • ベストアンサー
  • jgk
  • ベストアンサー率75% (104/138)
回答No.2

mainのループの中のsyori関数呼び出しは、 int syori(int no); ではなくて、 syori(no); ですね。 質問する際は使用言語と環境(OS、コンパイラ等)ぐらいは書きましょう。 コンパイルエラーとは関係有りませんが、 残高を初め100円にしたいのですよね?ならば、 int no,zandaka=100; これでは、main関数内で新しくローカル変数zandakaを宣言して100を入れることになってしまいます。 ですので、グローバル変数zandaka(syori関数が残高管理に使用する変数)に100が入りません。 int no; zandaka=100; が正しいです。

drite
質問者

お礼

ありがとうございます<(_ _)> 今度、質問するとき気をつけます。 助かりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> int main(void) > { > int no,zandaka=100; int no; int zandaka=100; としたらどうなりますか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • cプログラム

    #include<stdio.h> /*Calc MAX of (a,b)*/ int max(int x,int y) { if(x>y) return x; else return y; } /*Calc n!*/ void fact(int n) { int i,ans; ans=1; for(i=n;i>=1;i--){ ans*=i; } printf("ans=%d\n",ans); } /*END*/ void end() { printf("Thanks\n"); exit(0); } /*Main*/ int main() { int key; int a,b,saidai; int n; while(1){ puts("\n=====Main MENU ====="); puts("1.......max(a,b)"); puts("2.......n!"); puts("9.......END\n"); printf("Input No(1,2,9)=?"); scanf("%d",&key); switch(key){ case 1: printf("Inputs:a,b?"); scanf("%d,%d",&a,&b); saidai=max(a,b); //Call max(a,b) printf("max(%d,%d)=%d\n",a,b,saidai); break; case 2: printf("Input:n?"); scanf("%d",&n); fact(n); break; case 9: end(); break; default: printf("!!!!!Miss Input_No!!!!!\n"); break; } } のプログラムなのですが、1の処理を行った場合max(a,b)の値が正しく表示されません どこを直せばいいでしょうか? return(0);

  • プログラムが動かない

    電卓のプログラムを作ろうと以下のようなソースを書いたんですが、コンパイルするときに 警告 W8070 denntaku.c 38: 関数は値を返すべき(関数 main) というエラーが出てしまいます。 原因はなんなんでしょうか? (ソース) #include <stdio.h> main() {  int val1,val2,ans;  char p,m,k,w,how;  printf("val1? \n");  scanf("%d", &val1);  printf("how? \n");  scanf("%c", &how);  printf("val2? \n");  scanf("%d", &val2);  switch(how)  {   case 'p':   ans=val1+val2;   printf("%d+%d=%d \n", val1,val2,ans);   break;   case 'm':   ans=val1-val2;   printf("%d-%d=%d \n", val1,val2,ans);   break;   case 'k':   ans=val1*val2;   printf("%d*%d=%d \n", val1,val2,ans);   break;   case 'w':   ans=val1/val2;   printf("%d/%d=%d \n", val1,val2,ans);   break;  } }

  • C言語の四則演算プログラムについて

    こんにちは。hayato2192といいます。 今回は、C言語についてのことを質問したいとおもいます。 MSN相談箱の質問の中で数ある四則演算プログラムに対する質問をみたのですが、僕がつくろうとしているプログラムとはまったくちがいました。 プログラムコードは以下です。 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ #include <stdio.h> main() { int d1, d2; char op; printf("START PROGRAM : Arithmetic operation\n"); printf("ENTER THE NUMBER\n"); scanf(" %d", &d1); printf("ENTER THE OPERATOR\n"); scanf(" %c", &op); switch (op) { case '+': printf("ENTER THE NUMBER\n"); scanf(" &d", &d2); printf("ANSWER IS %d\n", d1+d2); break; case '-': printf("ENTER THE NUMBER\n"); scanf(" &d", &d2); printf("ANSWER IS %d\n", d1-d2); break; case '*': printf("ENTER THE NUMBER\n"); scanf(" &d", &d2); printf("ANSWER IS %d\n", d1*d2); break; case '/': printf("ENTER THE NUMBER\n"); scanf(" &d", &d2); printf("ANSWER IS %d\n", d1/d2); break; default: printf("NO ANSWER\n"); break; } return 0; } \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 使っている関数はscanf printf switchだけというとてもシンプルなプログラムなのです。 じっさい、このプログラムをBorlandのコンパイラでコンパイルすると、switch関数がまったく使われずに、演算子(このプログラムでいうOPERATORです)を入力するところで終了してしまいます。 どのように直せばよいのでしょうか。教えてください

  • このプログラムの問題点を教えてください。

    いつもお世話になっております。 また質問させていただきます。 あるサイトの課題を自分なりにやってみました。 問題文 クイズを3題出題し、ユーザの解答に応える(「正解」とか「不正解」とか言う)プログラムを書いてください。   クイズは何でもかまいません。 それで作ってみたプログラムがこれです。 #include <stdio.h> int main(void){ int x,y; printf("1234\n"); scanf("%d",&x); switch(x){ case 0: return 0; case1: printf("hgfhgfhsa\n"); break; case2: printf("hjtuyer\n"); break; case3: printf("uytcbbvxbn\n"); break; case4: printf("oiu68fgfd\n"); break; } while(1){ printf("haydhgfsjd?\n"); printf("1,kukakaka 2,hihihi 3,yayay\n"); scanf("%d",&y); if(y == 1){ printf("763827648327ue\n"); break; } else if(y == 2){ printf("menndokusai\n"); break; } なんとかコンパイルができました。本当は3問問題を書かなければいけないのですが2問目が終わって確認の意味でコンパイルしました。 それで実行してみたところ、1問目の答えが出ませんでした。自分でも理由がわかりません。 なので皆様に問題点を指摘してほしいのです。 へんな質問ですがよろしくおねがいします。

  • ジャンケンプログラム作ったんですが動作しません。

    Borland C++とVisualC++の両方でEXEまで出来るのですが、起動させてグーチョキパーの手の選択をしてリターンキーを押すと、エラーウィンドが出てしまいます。 いろいろ考えて見たのですが理由が分かりません。 どうか、バグの原因を教えてください。 #include <stdio.h> #include <stdlib.h> #include <time.h> void show_title(void); void match(void); void comp_match(void); void judge(void); void p_memory(void); int playerhand=1; //プレイヤーの手 int computerhand=0;//コンピューターの手 int win=0;//勝利数 int lost=0;//負け数 int draw=0;//引き分け数 int main(void) { while(playerhand!=0) { show_title(); match(); comp_match(); judge(); p_memory(); } return 0; } void show_title(void) { printf("ジャンケンゲームver0.1\n"); printf("製作 ForceFeed 2009/4.13\n"); } void judge(void) { if(playerhand==computerhand){ printf("引き分けですね"); draw++;//引き分けのカウント }else if(playerhand==1 && computerhand==2){ printf("あなたの勝ちです\n"); win++;//勝ちのカウント }else if(playerhand==2 && computerhand==3){ printf("あなたの勝ちです\n"); win++;//勝ちのカウント }else if(playerhand==3 && computerhand==1){ printf("あなたの勝ちです\n"); win++;//勝ちのカウント }else{ printf("あなたの負けです\n"); lost++;//負けのカウント } } void match(void) { printf("1:グー 2:チョキ  3:パー 0:終了 半角数字で入力してください>"); scanf("%d",playerhand); switch(playerhand) { case 1: printf("あなたの手 :グー\n"); break; case 2: printf("あなたの手 :チョキ\n"); break; case 3: printf("あなたの手 :パー\n"); break; case 0: printf("終了します。\n"); exit(0); default: printf("0、1,2,3以外の入力がありました"); break; } } void comp_match(void)//コンピューターの手 { srand((unsigned)time(NULL));//乱数の種 computerhand=rand()%3+1; switch(computerhand) { case 1: printf("コンピューターの手 :グー\n"); break; case 2: printf("コンピューターの手 :チョキ\n"); break; case 3: printf("コンピューターの手 :パー\n"); break; default: printf("1,2,3以外の入力がありました\n"); break; } } void p_memory(void) //記録表示 { printf("勝ち数 %d\n",win); printf("勝ち数 %d\n",lost); printf("勝ち数 %d\n",draw); }

  • 関数について

    C言語の関数プログラムで、月を入力すると季節を表示する関数を作っているのですが、上手くいきません・・・。何か違うのでしょうか。 #include <stdio.h> void month(int a) { switch(a) { case '3': case '4': case '5': printf("春です。"); break; case '6': case '7': case '8': printf("夏です。"); break; case '9': case '10': case '11': printf("秋です。"); break; case '12': case '1': case '2': printf("冬です。"); break; default: printf("そのような月はありません。"); break; } } int main(void) { int m; printf("月を表示してください:"); scanf("%d",&m); month(m); return 0; }

  • 教えてください!!

    このソースを実行しても、1~4を選んでも足し算になってしまいます。どこが違っているか、教えてください。 int main(void) { int na, nb, nc; printf("二つの整数の演算を行います。\n"); printf("二つの整数を入力してください\n"); printf("整数A"); scanf("%d", &na); printf("整数B"); scanf("%d", &nb); printf("1:加算\n2:減算\n3:乗算\n4:除算\n"); printf("1~4のどれかを入力してください。"); scanf("%d", &nc); switch(nc) { case1: printf("%d + %dは、%dです。\n", na, nb, na + nb); break; case2: printf("%d - %dは、%dです。\n", na, nb, na - nb); break; case3: printf("%d * %dは、%dです。\n", na, nb, na * nb); break; case4: printf("%d / %dは、%dです。\n", na, nb, na / nb); break; default: printf("%dは番号が違います。\n"); } return(0); }

  • プログラムの添削

    以下のような数当てゲームを作りました.なるべくうまいプログラムを書けるようになりたいのですが,どのような改善点がありますか?よろしくお願いします. /*数当てゲームを作りなさい.*/ #include<stdio.h> void maegaki(void); /*このように関数を定義しまくることに意味はあるのか?main関数はすっきりするけど.*/ void in_check_out(int i); int main(void) { int i; int j; maegaki(); for(j=0;j<10;j++) { scanf("%d",&i); in_check_out(i); if(!(i-1)) return 0; printf("残り%d回です.\n",9-j); } return 0; } void maegaki(void) { printf("数当てゲームをはじめます.\nぼくの好きな整数を当ててください.\nチャンスは10回です.\nヒントはボゾン\n"); } void in_check_out(int i) { if(!(i-1)) { printf("正解!答えは1です.\n"); } else { printf("残念!\n"); if(i>1) printf("%dより小さいです.\n",i); else printf("%dより大きいです.\n",i); } }

  • realloc関数の使い方

    前回のmalloc関数の使い方の続きみたいな感じです。 参考書にはmalloc関数とcalloc関数については載っていましたがrealloc関数については記述はありませんでした。 realloc関数はメモリの拡張や縮小ができるというみたいなのでdo~while文の中に入れています。 どこが間違っているのでしょうか。 /* 課題3-6 */ #include <time.h> #include <stdio.h> #include <stdlib.h> int user; /* プレーヤの手 */ int comp; /* コンピュータの手 */ int win_no; /* 勝った回数 */ int lose_no; /* 負けた回数 */ int draw_no; /* 引き分けた回数 */ int *a; int *b; int *a1; int *b1; int i; int stage = 0; char *hd[] = {"グー", "チョキ", "パー"}; /* 手 */ /* initialize関数の宣言 */ void initialize(void); /* jyanken関数の宣言 */ void jyanken(void); /* count_no関数の宣言 */ void count_no(int result); /* disp_result関数の宣言 */ void disp_result(int result); /* confirm_retry関数の宣言 */ int confirm_retry(void); /* rireki関数の宣言 */ void rireki(void); /* メイン関数 */ int main(void) { int judge; /* 勝敗 */ int retry; /* もう一度 */ initialize(); /* 初期処理 */ a = (int *)calloc(5, sizeof(int)); b = (int *)calloc(5, sizeof(int)); do{ jyanken(); /* じゃんけん実行 */ /* コンピュータとプレーヤの手を表示 */ printf("私は%sで、あなたは%sです。\n", hd[comp], hd[user]); judge = (user - comp + 3) % 3; /* 勝敗を判定 */ count_no(judge); /* 勝/負/引分け回数を更新 */ disp_result(judge); /* 判定結果を表示 */ retry = confirm_retry(); a1 = (int *)realloc(a, sizeof(int) * (draw_no+lose_no+win_no+1)); b1 = (int *)realloc(b, sizeof(int) * (draw_no+lose_no+win_no+1)); rireki(); }while(retry == 1); for(i=0; i<draw_no+lose_no+win_no; i++){ printf("%d回目 ユーザ%c コンピュータ%c\n", i+1, hd[b1[i]], hd[a1[i]]); } printf("%d勝%d敗%d分けでした。\n", win_no, lose_no, draw_no); free(a); free(b); return (0); } /*--- 初期処理 ---*/ /* initialize関数の定義 */ void initialize(void) { win_no = 0; /* 勝った回数 */ lose_no = 0; /* 負けた回数 */ draw_no = 0; /* 引き分けた回数 */ srand(time(NULL)); /* 乱数の種を初期化 */ printf("じゃんけんゲーム開始!!\n"); } /*--- じゃんけん実行(手の読み込み/生成) ---*/ /* jyanken関数の定義 */ void jyanken(void) { int i; comp = rand() % 3; /* コンピュータの手 (0~2) を乱数で生成 */ printf("\n\aじゃんけんポン …"); for(i=0; i<3; i++) printf(" (%d)%s", i, hd[i]); printf(":"); scanf("%d", &user); /* プレーヤの手を読み込む */ } /*--- 勝/負/引き分回数を更新 ---*/ /* count_no関数の定義 */ void count_no(int result) { switch(result){ case 0: draw_no++; break; case 1: lose_no++; break; case 2: win_no++; break; } } /*--- 判定結果を表示 ---*/ /* disp_result関数の定義 */ void disp_result(int result) { switch(result){ case 0: puts("引き分けです。"); break; /* 引き分け */ case 1: puts("あなたの負けです。"); break; /* 負け */ case 2: puts("あなたの勝ちです。"); break; /* 勝ち */ } } /*--- 再挑戦するか確認 ---*/ /* confirm_result関数の定義 */ int confirm_retry(void) { int x; printf("もう一度しますか … (0)いいえ (1)はい:"); scanf("%d", &x); return (x); } /*--- 履歴の表示 ---*/ /* rireki関数 */ void rireki(void) { a1[stage] = comp; b1[stage] = user; stage++; }

  • \x1bを使ったswitch文が反応しない

    int main(void){ int n; while(1){ menu(); scanf("%d", &n); switch(n){ case 1 : printf("\x1b[6;10H%s", "メニュー1を実行します"); break; case 2 : printf("\x1b[6;10H%s", "メニュー2を実行します"); break; case 3 : printf("\x1b[6;10H%s", "メニュー3を実行します"); break; default : printf("\x1b[6;10H%s", "指定数字ではありません"); break; } } return 0; } void menu(void){ printf("\x1b[2J"); printf("\x1b[3;10H%s", "メニュー1"); printf("\x1b[4;10H%s", "メニュー2"); printf("\x1b[5;10H%s", "メニュー3"); } コンパイルは通るのですが、数字を入力しても反応が無くwhile(1)の繰り返しが続くだけになってしまいます。これはどこか問題あるでしょうか?