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

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

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

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

Q&A

解決済

2回答

1366閲覧

C言語での間違えた数の数え方、繰り返しコードが分からない

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

0グッド

0クリップ

投稿2020/06/07 16:35

編集2020/06/07 22:19

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
C言語の練習として動物当てクイズを作ろうとして1~7の動物を選んで7の猫が当てるまで繰り返し、4回間違えると負けというゲームを作ろうとしたのですが4回目ギリギリに正解しても間違いとなって私の勝ちですコメントが表示されてしまいます。
ですから4回目は正解しても不正解でも負けになってしまうので4回目ギリギリに正解した場合は私の負けですコメントが表示したいです
C言語を勉強し始めた初心者です。

これはついでなのですがよかったら間違えた数や入力した数を数えるにはどういったコードを作るべきか教えてください
ここで見えるソースコードでの改行は¥nに見えますが実際のコードではちゃんと半角で\nと書いてます。

発生している問題・エラーメッセージ

4回目で正解しても間違いとなってしまいます。

該当のソースコード

C言語

#include <stdio.h> int main(void) { int a = 7, b = 0, c = 0; printf("私とどうぶつ当てゲームをしましょう(*'ω'*)。私が考えている動物を当ててください。\n間違えるたびにヒントを表示します。\n"); printf("私の考えている動物は何でしょう\n次の番号から入力してください\n"); printf("1:犬\n2:カンガルー\n3:イルカ\n4:ワニ\n5:スズメ\n6:サル\n7:猫\n"); scanf_s("%d", &b); while (a != b) { printf("残念はずれです( ̄ー ̄)\n"); if (c == 0)printf("ヒント:4足歩行です\n"); scanf_s("%d", &b); c++; if (c == 1)printf("ヒント:あまり大きくないです\n"); if (c == 2)printf("ヒント:嵐のドラマに出たことがあります\n"); if (c == 3) { printf("ヒント:ペットとして人気です\n4回間違えたので私の勝ちです(^^)/"); if (c <= 4)break; return 0; } } if (c!=3 && c <= 4)printf("正解です。私の負けです(´;ω;`)\nまた遊びましょう(^-^)\n"); return 0; }

補足情報(FW/ツールのバージョンなど)

visual studio expressを使っています

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

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

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

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

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

cateye

2020/06/07 16:51

ループの脱出条件は? if(c!=5)はif(c<5)なのでは?
退会済みユーザー

退会済みユーザー

2020/06/07 17:12

ご回答ありがとうございます。修正させていただきました。
YT0014

2020/06/07 17:15

C#ではないので、C#タグははずしてください。
guest

回答2

0

ベストアンサー

#include <stdio.h>

int main(void)
{
int a = 7, b = 0, c = 0;
printf("私とどうぶつ当てゲームをしましょう('ω')。私が考えている動物を当ててください。\n間違えるたびにヒントを表示します。\n");
printf("私の考えている動物は何でしょう\n次の番号から入力してください\n");
printf("1:犬\n2:カンガルー\n3:イルカ\n4:ワニ\n5:スズメ\n6:サル\n7:猫\n");
scanf_s("%d", &b);

while (a != b) { printf("残念はずれです( ̄ー ̄)\n"); if (c == 0)printf("ヒント:4足歩行です\n"); scanf_s("%d", &b); c++; if (c == 1)printf("ヒント:あまり大きくないです\n"); if (c == 2)printf("ヒント:嵐のドラマに出たことがあります\n"); if (c == 3 && a!=b) { printf("ヒント:ペットとして人気です\n4回間違えたので私の勝ちです(^^)/"); if (c <= 4) return 0; } } if (a=b)printf("正解です。私の負けです(´;ω;`)\nまた遊びましょう(^-^)\n"); return 0;

}

で自己解決しました。
間違い ヒント1表示
間違い ヒント2表示
間違い ヒント3表示
間違い 私の勝ちコメント(終了)

回答数1~4の中で正解した場合は私の負けコメント(終了)

間違い3回 ラストギリギリで正解 私の負けコメント(終了)
私の思い通りの動きが実行できました
ありがとうございました。

投稿2020/06/07 22:28

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

scanf_s("%d,&b");→scanf_s("%d",&b);・・・2箇所有りますd^^
if (c = 1)→if (c == 1)・・・比較は=ではなく==です。・・・ほかも・・・
見落としていましたがc+1;は、c++;の間違いでは?
追記 現状のソース上げときます。

c

1#include <stdio.h> 2 3int main(void) 4{ 5 int a = 7, b = 0, c = 0; 6 puts("私とどうぶつ当てゲームをしましょう。私が考えている動物を当ててください。(*'ω'*)\n間違えるたびにヒントを表示します。"); 7 puts("私の考えている動物は何でしょう\n次の番号から入力してください"); 8 puts(" 1:犬\n 2:カンガルー\n 3:イルカ\n 4:ワニ\n 5:スズメ\n 6:サル\n 7:猫"); 9 // 10 scanf("%d", &b); 11 12 while(a != b) { 13 puts("残念はずれです( ̄ー ̄)"); 14 scanf("%d", &b); 15 16 c++; 17 if(c > 4) { 18 puts("4回間違えたので私の勝ちです(*'ω'*)"); 19 break; 20 } 21 // 22 if(c == 1) { 23 puts("ヒント:4足歩行です"); 24 } 25 if(c == 2) { 26 puts("ヒント:あまり大きくないです"); 27 } 28 if(c == 3) { 29 puts("ヒント:嵐のドラマに出たことがあります"); 30 } 31 if(c == 4) { 32 puts("ヒント:ペットとして人気です"); 33 } 34 } 35 // 36 if(c < 5) { 37 puts("正解です。私の負けです(´;ω;`)\nまた遊びましょう(^^)/"); 38 } 39 // 40 return 0; 41}

VC以外でscanf_s()は使えないのでscanf()に変更。文字列出力はputs()に変えてあります。
ブロック構造 {}は私の主観なので・・・
ついでに・・・改行'¥n'の¥が全角になっていました。(直してあります)

実行結果
---------->8---------->8---------->8---------->8---------->8----------
私とどうぶつ当てゲームをしましょう。私が考えている動物を当ててください。('ω')
間違えるたびにヒントを表示します。
私の考えている動物は何でしょう
次の番号から入力してください
1:犬
2:カンガルー
3:イルカ
4:ワニ
5:スズメ
6:サル
7:猫
1
残念はずれです( ̄ー ̄)
2
ヒント:4足歩行です
残念はずれです( ̄ー ̄)
3
ヒント:あまり大きくないです
残念はずれです( ̄ー ̄)
4
ヒント:嵐のドラマに出たことがあります
残念はずれです( ̄ー ̄)
5
ヒント:ペットとして人気です
残念はずれです( ̄ー ̄)
6
4回間違えたので私の勝ちです('ω')
---------->8---------->8---------->8---------->8---------->8----------
変な所わかりますか?

投稿2020/06/07 16:44

編集2020/06/07 20:57
cateye

総合スコア6851

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

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

退会済みユーザー

退会済みユーザー

2020/06/07 17:13

ご回答ありがとうございます修正されていただきました。 まだ修正しても思い通りに動かないためご教授ください。
YT0014

2020/06/07 17:27

どのように修正したのか?修正後、どのような動きになったのか?ご提示いただけないと、助言は不可能です。 また、whieループの終了条件は、質問欄のソースでは正解した場合のみですが、良いのでしょうか?
退会済みユーザー

退会済みユーザー

2020/06/07 17:32

どのように修正したのかと修正後の動きは質問欄に書いてある通りです。 正解した場合のみでいいと思うのですが何かだめですか? 不正解して正解のルートに行かれると困るのですが 4回間違えたら私の勝ちコメントそれ以内に正解すればループを抜け出して私の負けコメントが表示されるようにしたのですが。
YT0014

2020/06/07 17:38

cateyeさんの追記で、「見落としていましたがc+1;は、c++;の間違いでは?」がありますが、ご対応いただいたのでしょうか? また、現状、不正解の場合、そのまま下へ処理が続き、whileループが繰り返され、不正解メッセージは表示されますが、正解するまで、再入力ができます。 それは、希望通りの動作ということで、良いのですね?
退会済みユーザー

退会済みユーザー

2020/06/07 21:20

4回間違えたら私の勝ちコメントが表示されて入力できないようにしたいです。
cateye

2020/06/07 21:27

2個目のscanf()の位置を考えましょう。
退会済みユーザー

退会済みユーザー

2020/06/07 21:51

scanf()の位置どこかだめですか?
退会済みユーザー

退会済みユーザー

2020/06/07 22:20

4回間違えたら勝ちコメントが出て入力できないようにはできたのですが 4回目は正解しても不正解しても私の勝ちコメントが流れてしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問