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

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

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

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

Q&A

解決済

1回答

3261閲覧

C言語 プログラムが途中で止まる

mkn66

総合スコア41

C

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

0グッド

0クリップ

投稿2021/11/19 07:41

編集2021/11/19 07:53

vscodeを使用しています。
C言語で数字を当てるゲームを作ってみました。
しかし、実行してみるとデバッグじではエラーが出なかったのですが実行途中に止まり下記の表示が出ました。
1人目がカードを入力した後にエンターを押した後です。
イメージ説明

下記がコードです。
読みづらくてすいません。

C

1#include<stdio.h> 2 3int n; 4 5void fun1 (int a[n]) /*カードを決める関数です*/ 6{ 7 for(int i = 0;i < n;i++){ 8 printf("%d枚目",i+1); 9 scanf("%d",&a[i]); 10 } 11 12} 13 14void fun2 (int *a,int *c,int *eat, int *bite) /*カードがあっているかを確認する関数です*/ 15{ 16 for (int i = 0;i < n;i++){ 17 if(a[i] == c[i]){ 18 *eat +=1; 19 } 20 for(int x = 0;x < n;x++){ 21 if(a[i] == c[x]){ 22 *bite += 1; 23 } 24 } 25 } 26} 27 28void fun3(int *c,int m) /*入力したカードに重なりがないかを確認する関数です*/ 29{ 30 do{ 31 fun1(c); 32 for(int i=0;i<n;i++){ 33 for(int y = i+1;y<n;y++){ 34 if(c[i] == c[y]){ 35 printf("同じ数字は入力しないでください!"); 36 m=0; 37 break ; 38 } 39 } 40 } 41 m = 1; 42 } while (m == 0); 43 44 45 46} 47int main(void) 48{ 49 int *a,*b,*c; 50 int eat,bite,m,w; 51 int *eat1,*bite1; 52 eat1 = &eat; 53 bite1 = &bite; 54 char p[32],q[32]; 55 printf("1人目の名前を入力してください:"); 56 scanf("%s",p); 57 printf("2人目のの名前を入力してください:"); 58 scanf("%s",q); 59 printf("何枚でゲームをするかを選んでください:"); 60 scanf("%d",&n); 61 printf("%sさんはカードを入力してください\n",p); 62 fun1(a); 63 printf("%sさんはカードを入力してください\n",q); 64 fun1(b); 65 printf("ゲームスタート!\n"); 66 for (w=0;w < 100;w++){ 67 *eat1 = 0; 68 *bite1 = 0; 69 printf("%sさんは%sさんのカードを当ててください\n",p,q); 70 fun3(n,m);/*カードを入力して同じ数字がないかを確認*/ 71 if(c[0] == -1){break;} 72 fun2 (b,c,eat1,bite1);/*カードの比較*/ 73 printf("%dEAT,%dBITE",eat,bite); 74 if(eat == n){break;} 75 *eat1 = 0; 76 *bite1 = 0; 77 printf("\n%sさんは%sさんのカードを当ててください\n",q,p); 78 fun3(c,m);  /*カードを入力して同じ数字がないかを確認*/ 79 if(c[0] == -1){break;} 80 fun2(a,c,eat1,bite1);/*カードの比較*/ 81 printf("%dEAT,%dBITE\n",eat,bite); 82 if(eat == n){break;} 83 } 84 85 printf("you win!!"); 86 return 0; 87}

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

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

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

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

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

guest

回答1

0

ベストアンサー

コンパイル時にエラーとか出ませんか?

例えば、

void fun1 (int a[n]) 

一般的には、void fun1 (int a[])かと。
で、呼び出しているところを見ると、fun1(a); int *aで宣言されていますが、aポインタの宣言で、実体の割当てが無いので、多分、ここでエラーかと。

ところで、エラー画面がアセンブラとなっていますが、C言語でのエラー箇所がでないのでしょうか?
... とよく見ると、左下に、トレースが出ています。fun1() ソースコードの9行目でのエラーであることが分かります。

投稿2021/11/19 08:26

pepperleaf

総合スコア6385

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

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

mkn66

2021/11/19 08:37

左下に書いてあるのですね。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問