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

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

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

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

1430閲覧

C言語 ループがうまくいかない。

ryouk

総合スコア4

C

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

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2021/05/06 05:11

前提・実現したいこと

C言語で数当てゲームを作成しています。
その際に
続けますか?(1:続ける 0:終了):
の画面まで表示されるのですが1や0を入力してもプログラムが止まってしまいます。

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

3桁の数を当ててください! 1桁目の予想を0~9の数字で入力してください:3 2桁目の予想を0~9の数字で入力してください:4 3桁目の予想を0~9の数字で入力してください:5 0ヒット! 1ブロー! 続けますか?(1:続ける 0:終了):1

該当のソースコード

C

1#include <stdio.h> 2#include <stdbool.h> 3#include <stdlib.h> 4#include <time.h> 5 6typedef char String[1024]; 7 8int main(void) 9{ 10 srand((unsigned)time(NULL)); 11 printf("***数当てゲーム(レベル2)***\n"); 12 printf("3桁の数を当ててください!\n"); 13 14 const int TIMES = 3; 15 int answer [TIMES]; 16 int input [TIMES]; 17 18 for (int i = 0; i < TIMES; i++) 19 { 20 answer[i] = rand () % 10; 21 } 22 23 do { 24 int hit = 0; 25 int blow = 0; 26 27 for (int j = 0; j < TIMES; j++) 28 { 29 printf("%d桁目の予想を0~9の数字で入力してください:", j + 1); 30 String inputStr; 31 scanf("%s", inputStr); 32 input[j] = atoi(inputStr); 33 } 34 35 for (int i = 0; i < TIMES; i++) 36 { 37 if (answer[i] == input[i]) 38 { 39 hit++; 40 } 41 for (int j = 0; j < TIMES; j++) 42 { 43 if (input[i] == answer[j] && i != j) 44 { 45 blow++; 46 } 47 48 } 49 } 50 51 52 printf("%dヒット! %dブロー!\n", hit, blow); 53 if (hit == 3) 54 { 55 printf("正解です\n"); 56 break; 57 } else { 58 printf("続けますか?(1:続ける 0:終了):"); 59 String retryStr; 60 scanf("%s, retryStr"); 61 if (atoi(retryStr) == 0) 62 { 63 printf("正解は%d%d%dでした!\n", answer[0], answer[1],answer[2]); 64 break; 65 } 66 67 } 68 }while (true); 69 70 return 0; 71}

試したこと

何度も見直したが、問題点がわかりませんでした。

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

VScodeで作成しています。
コンパイルはgccを使っています。

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

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

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

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

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

K_3578

2021/05/06 05:11

CなんだったらC#タグは不要です。外しましょう。
ryouk

2021/05/06 06:11

ありがとうございます。
K_3578

2021/05/06 06:15

>ありがとうございます。 うん、お礼なんか良いのでタグ検索の邪魔になるから今からでも編集で外してください。
guest

回答3

0

ベストアンサー

scanf("%s, retryStr");

scanf("%s", retryStr); じゃなくて?

投稿2021/05/06 05:14

episteme

総合スコア16614

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

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

ryouk

2021/05/06 06:11

ありがとうございます! 無事解決できました。
guest

0

元のソースコードをコンパイルすると何らかの警告が出ると思います。
手元のコンパイラ(gcc)では次のような警告が出ました。

hoge.c: In function ‘main’: hoge.c:60:15: warning: format ‘%s’ expects a matching ‘char *’ argument [-Wformat=] scanf("%s, retryStr");

scanfの行で文字列を格納する変数を指定するのを忘れているのが原因だと思います。

diff

1--- hogeorg.c 2021-05-06 14:18:10.007693111 +0900 2+++ hoge.c 2021-05-06 14:17:28.699615707 +0900 3@@ -57,7 +57,7 @@ 4 } else { 5 printf("続けますか?(1:続ける 0:終了):"); 6 String retryStr; 7- scanf("%s, retryStr"); 8+ scanf("%s, retryStr", retryStr); 9 if (atoi(retryStr) == 0) 10 { 11 printf("正解は%d%d%dでした!\n", answer[0], answer[1],answer[2]);

投稿2021/05/06 05:22

hidezzz

総合スコア1248

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

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

0

C言語のコードを書くなら、デバッグできる環境を整えましょう。
Eclipseや、WindowsならVisualStudioなど。
コードの任意の場所で実行を止め、変数のナカミを見ることができます。そこから1行づつ実行して、コードの流れを見れるようになります
そうすれば、アテズッポでコードを書かなくて済むようになります。

投稿2021/05/06 05:15

y_waiwai

総合スコア87774

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

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

ryouk

2021/05/06 06:09

ありがとうございます。 VScodeとはまた別にVisualStudioをダウンロードするということでしょうか?
y_waiwai

2021/05/06 06:14

VScodeとGCCの組み合わせでもデバッグ環境は整えられます また、フリーソフトで教育用のデバッグ環境をインストールできるやつもあったりします その手の記事がたくさんあるので、試してみてはどうでしょう
ryouk

2021/05/06 06:29

わかりました! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問