![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
C言語のじゃんけんゲームのプログラムです。正直何がダメなのか分かりません。
エラー表示は
watashinoken関数のkenが定義されていないなどがありました。
また、1回した後に1を押したらもう一度、1以外で終了するプログラムと、
累計勝敗(〇勝〇敗〇分け)を表示するプログラムを追加するにはどうすればいいですか?
ちょー急ぎでお願いします!
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
typedef enum janken {
Gu = 0, Choki = 2, Pa = 5
}JPON;
int saikoro(void) {
int sai;
srand((unsigned)time(NULL));
sai = rand();
return(sai);
}
int sysjan(int sainome) {
int pon;
switch(sainome)
{
case 1:pon = 0; break;
case 2:pon = 0; break;
case 3:pon = 2; break;
case 4:pon = 2; break;
case 5:pon = 5; break;
case 6:pon = 5; break;
}
return((JPON)pon);
}
int watashinoken(void)
{
switch (ken)
{
case Gu: {
printf("私はグーを出しました。\n"); break; }
case Choki: {
printf("私はチョキを出しました。\n"); break; }
case Pa: {
printf("私はパーを出しました。\n"); break; }
}
}
int anatanoken(void)
{
switch (ken)
{
case ken = 0: {
printf("あなたはグーを出しました。\n"); break; }
case ken = 2: {
printf("あなたはチョキを出しました。\n"); break; }
case ken = 5: {
printf("あなたはパーを出しました。\n"); break; }
}
}
int shoubu(kenin, kenout) {
int shoubukekka;
switch (kenout) {
case Gu:
{if (kenout == 0)shoubukekka = 0;
else if (kenout == 2)shoubukekka = 1;
else shoubukekka = -1;
}
case Choki:
{if (kenout == 0)shoubukekka = -1;
else if (kenout == 2)shoubukekka = 0;
else shoubukekka = 1;
}
case Pa:
{if (kenout == 0)
shoubukekka = 1;
else if (keno==2)
shoubukekka = -1;
else
shoubukekka = 0;
}
return(shoubukekka);
void kekka(int shoubukekka) {
if (shoubukekka == -1)printf("\nあなたの負けです\n");
else if (shoubukekka == 1)printf("\nあなたの勝ちです。\n");
else if (shoubukekka == 0)printf("\nあいこです\n");
int main(void)
JPON coken;
JPON sysken;
int ken_buf, sai, shoubukekka;
do {
puts("\nジャンケンをしましょう。");
puts("グーは0 チョキは2 パーは5をいれます。");
puts("\nじゃんけんぽん はい!どうぞ:"); scanf_s("%d", &ken_buf);
choken = (JPON)ken_buf;
if ((choken != Gu) && (choken != Choki) && (choken != Pa))
printf("\n@@@正しく入れてください@@@\n");
} while (!(choken == Gu) || (choken == Choki) || (choken == Pa));
sai = saikoro();
sysjan = (sai);
shoubukekka = shoubu(choken, sysjan);
printf("\a");
anatanoken(choken);
watashinoken(sysjan);
kekka(shoubukekka);
printf("\n終わります。お疲れ様でした。\n\n");
return(0);
}
No.2ベストアンサー
- 回答日時:
> watashinoken関数のkenが定義されていないなどがありました。
watashinoken関数は
> int watashinoken(void)
と無引数で定義されてるのに、いきなり
> switch (ken)
とかなってるんだけど、このkenは何?って事。watashinoken関数でこのswitch文以前には何もkenが定義されていません。
当然エラーが起きますね。
> 1回した後に1を押したらもう一度、1以外で終了するプログラムと、
累計勝敗(〇勝〇敗〇分け)を表示するプログラムを追加するにはどうすればいいですか?
まず、一般論。
まぁ、ゲームに限らないんだけど、例えばGUIのソフトなんかで、「ずーっと起動してるままの状態」を形作るブツをつや〜にイベントループと呼びます。
カッコつけて言ってるだけなんだけど、原則CLIのソフトも同じで、「何らかの動作をしまくってる」状態だと当然ループしてないとならない。
つまり、形式的にはmain関数内では
while (1) {
ジャンケンやる命令
}
return 0;
と書かれてるのが基本なのね。
そうするとwhileはただ繰り返すだけなんだけど、ここから脱出したり「繰り返しをやり直す」命令があれば・・・って話になる。
それが次の2つになるわけ。
・break => 脱出
・continue => アタマに戻る
つまり、考え方としては
while (1) {
ジャンケンやる命令
if (入力 == 1) {
continue;
} else {
break;
}
}
return 0;
とすれば良い、って事ですな。
累計勝敗に対しては単に変数用意しておいて記録取っていけば良いだけ、です。
No.1
- 回答日時:
「エラー表示」に「watashinoken関数のkenが定義されていない」とあるんだったら, 「それ」がダメなんだよ.
もっとはっきり言えば
あなたの理解度
がダメなんだけど.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# プログラムの時、フローチャートはどうなりますか?図でお願いします。 int main(void) { 1 2022/10/01 22:45
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# プログラミングのペーパーテスト 実行結果を表示せよ #include <stdio.h> int h 1 2022/07/09 15:27
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
printf で二進表示を行いたい。
-
既約分数の表示プログラム
-
10個出力で改行したいのですが...
-
CTRL+Dでループを抜けるには
-
defineで定数が置き換えられな...
-
コンパイルエラーについて
-
コーディング
-
c言語でAからZまでを表示する...
-
3つの整数が等しいかどうか調...
-
サイコロをふって、出た目のパ...
-
C言語で五目並べを作成している...
-
2進数の加算の繰り上がり
-
覆面算 C
-
if~else文の中にまたif~else...
-
BMI値から体型を判定するプログ...
-
error C2143: 構文エラー : ';'...
-
解説お願いします。
-
C言語で多項式の割り算のプログ...
-
cshの文字列操作(0埋め)
-
なぜgccはstdio.hをインクルー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
【C言語教えてください】sin波...
-
printf で二進表示を行いたい。
-
c言語でAからZまでを表示する...
-
コマンドラインに出力した文字...
-
strcmp
-
4の倍数を論理演算で表す。。
-
C言語での、年複利の計算方法...
-
C言語 プログラミング
-
scanfに文字が入力されたときに...
-
hit&bolwのプログラミングがで...
-
%P と %X の違い
-
unsigned int型について
-
printf( " %2d", p * q );
-
cshの文字列操作(0埋め)
-
改行について 1行に何個かづ...
-
8人分のテストの点数を入力し、...
-
入力したお金の金額からお札の...
-
三角形の判別
-
テキストカーソル位置の取得
おすすめ情報