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

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

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

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

Q&A

解決済

5回答

1142閲覧

配列内のチェックのプログラムで関数が機能しません

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

0グッド

0クリップ

投稿2017/03/30 05:00

編集2017/03/30 06:25

こんにちは1次元配列の中をチェックし0だけがあれば"OK"という表示がでるプログラムを作りたいのですが、自作関数が機能しません。どなたか回答お願いします。

自作関数"tansa"の中の"c"は配列の中の総和です。総和が0なら次の処理へ。1なら"break"です。
(本当は多次元(?)配列でチェックするものを作りたかったのですが、そちらは宣言でエラーが出てしまい1次元配列を複数使用しています。
自作関数"tansa"はforを2つ使用してもできると思ったのですが。ひとまず掲載しているものの変更をお願いします。

#include "stdafx.h" #include "string.h" #include "stdio.h" #include "stdlib.h" #include "time.h" void tansa(); int bufni[4] = { 0,0,0,0 }; int bufsan[4] = { 0,0,0,0 }; int bufyon[4] = { 0,0,0,0 }; int bufgo[4] = { 0,0,0,0 }; int bufroku[4] = { 0,0,0,0 }; void main() { printf("\n\n\n\nstart\n\n\n\n\n"); tansa(); printf("end\n\n\n\n\n"); } void tansa() { int a; int b, c; int i; for (i = 0; i == 1; i++) { for (a = 1; a < 4; a++) { b = bufni[a]; c += b; } switch (b) { case 0: a = 0; case 1: break; default: break; } a, b = 0; //a,bの初期化 for (a = 0; a < 4; a++) { b = bufsan[a]; c += b; } switch (b) { case 0: a = 0; case 1: break; default: break; } a, b = 0; for (a = 0; a < 4; a++) { b = bufyon[a]; c += b; } switch (b) { case 0: a = 0; case 1: break; default: break; } a, b = 0; for (a = 0; a < 4; a++) { b = bufgo[a]; c += b; } switch (b) { case 0: a = 0; case 1: break; default: break; } a, b = 0; for (a = 0; a < 4; a++) { b = bufroku[a]; c += b; } switch (b) { case 0: printf("OK\n"); break; case 1: break; default: break; } } } コード

追記

エラー分の内容(一部)
debug error!
...
..
run-time check failure#3-the bariable'c'is being used without being initializted.

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

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

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

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

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

guest

回答5

0

tansa の中の

C

1 for (i = 0; i == 1; i++) {

ここが原因です。
i が 0 に初期化され、最初のループのとき、ループ継続条件が i==1 になってますから、このループが終了します。
つまり、これ、一度もループしていないのです。

投稿2017/03/30 05:12

tacsheaven

総合スコア13703

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

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

退会済みユーザー

退会済みユーザー

2017/03/30 06:15

回答ありがとうございます。 "i==0"では実行できないと覚えておきます。 現在再度デバッグ(?)中です。 しばらくのち再度質問文閲覧願えないでしょうか。 よろしくお願いします。
guest

0

for (i = 0; i == 1; i++) {

for (a = 1; a < 4; a++) { b = bufni[a]; c += b; } switch (b) {

総和をswitch文で見るなら(b)でなく(c)では?
この関数ではCは総和ですが、何も利用してない様なので。

投稿2017/03/30 05:12

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/03/30 06:12

回答たすかります。 "b" そうでした プログラムまだエラーがでてしまうので 受付更新します。再度閲覧よろしくお願いします。
guest

0

パッと見ただけで2箇所おかしなところがあります。

  • for (i = 0; i == 1; i++)ですが、条件式の判定はループに入った直後にも行われますので、このままではループは1度も実行されません。i <= 1など条件を変更しましょう。
  • a, b = 0;ですが、これはa, (b = 0);と解釈されるためaは変化しません。両方を0にしたければa = b = 0;が正しいです。

投稿2017/03/30 05:11

maisumakun

総合スコア145183

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

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

退会済みユーザー

退会済みユーザー

2017/03/30 06:10

回答ありがとうございます ”a=b=0;”という方法があるのですね 指摘点をかえて再度実行したのですが、エラーがでてしまい表示は"start"でととまり"debug error"というものが途中で出てしまいます。 質問を更新するので再度回答願います。お願いします。
guest

0

c

1#include "stdafx.h" 2#include "string.h" 3#include "stdio.h" 4#include "stdlib.h" 5#include "time.h" 6 7 8 9 10void tansa(); 11 12 13int bufni[4] = { 0,0,0,0 }; //bufの表示がずれています 14int bufsan[4] = { 1,1,0,0 }; 15int bufyon[4] = { 0,1,0,0 }; 16int bufgo[4] = { 0,0,0,0 }; 17int bufroku[4] = { 0,0,1,1 }; 18 19 20 21int main() 22{ 23 24 printf("\n\n\n\nstart\n\n\n\n\n"); 25 tansa(); 26 printf("end\n\n\n\n\n"); 27 28} 29 30 31void tansa() 32{ 33 int a; 34 int b, c = 0; 35 int i; 36 37 38 39 printf("1\n"); 40 for (a = 0; a < 4; a++) { 41 b = bufni[a]; 42 c += b; 43 if (c == 0) printf("OK "); else (printf("error "), c = 0); 44 } 45 c = 0; //"c"の初期化 46 47 48 printf("\n\n\n2\n"); 49 for (a = 0, b = 0; a < 4; a++) { 50 b = bufsan[a]; 51 c += b; 52 if (c == 0) printf("OK "); else (printf("error "), c = 0); 53 } 54 c = 0; 55 56 57 printf("\n\n\n3\n"); 58 for (a = 0, b = 0; a < 4; a++) { 59 b = bufyon[a]; 60 c += b; 61 if (c == 0) printf("OK "); else (printf("error "), c = 0); 62 } 63 c = 0; 64 65 66 printf("\n\n\n4\n"); 67 for (a = 0, b = 0; a < 4; a++) { 68 b = bufgo[a]; 69 c += b; 70 if (c == 0) printf("OK "); else (printf("error "), c = 0); 71 } 72 c = 0; 73 74 75 printf("\n\n\n5\n"); 76 for (a = 0, b = 0; a < 4; a++) { 77 b = bufroku[a]; 78 c += b; 79 if (c == 0) printf("OK "); else (printf("error "), c = 0); 80 } 81 printf("\n\n\n"); 82} 83 84 85 86 87 88

投稿2017/03/31 00:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

1.iが1の時だけ処理をするってなります。

for (i = 0; i == 1; i++) { }

for (初期値; 条件;式) {
処理
}
初期値→条件→{処理}→式の順だったと思います。

2.aが1から始まります。のでa[0]の値は不要でしょうか?

for (a = 1; a < 4; a++) { b = bufni[a]; c += b; }

3.bには、bufni[3] の値が設定されています。

switch (b) { case 0: a = 0; : }

4.総和が0だったら次の処理で、1ならbreakとはどう言う意味でしょうか?
以下が、switch 文の式です。

switch (式) { case定数式1: 文1; break; case定数式2: 文2; break; case定数式n: 文n; break; default: 文; break; }
for (a = 1; a < 4; a++) { b = bufni[a]; c += b; } ← ここまでが、for 文の処理をします。 switch (b) { case 0: a = 0; case 1: break; default: break; } ← ここまでが、switch 文の処理をします。

もしかしたら、
for 文の値の bが1だったら処理を中断すると言う意味なのか?
ただ、、以下の事をすると、恐ろしいことになるので気をつけてくださいね。
また、switch文の break;はその case を抜けると言う意味だと思います。
なので、case 0 の場合は case1 の条件の処理もします。。

for (a = 1; a < 4; a++) { b = bufni[a]; c += b; switch (b) { case 0: a = 0; case 1: break; default: break; } ← ここまでが、switch 文の処理をします。 } ← ここまでが、for 文の処理をします。

5。丁寧にaやb を初期化しようとしていますが、
for 文でも、for文の中で、で設定しているので、不要かと思いますが、
以下のようにしたらどうでしょうね。

for (a = 0, b = 0; a < 4; a++) {

6。処理中に
print 文を入れて、ここまで到達しているって確認しながらやると
もっと楽しくなると思います。

投稿2017/03/30 06:14

qmomo

総合スコア51

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

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

退会済みユーザー

退会済みユーザー

2017/03/30 06:32

”for 文の値の bが1だったら処理を中断すると言う意味なのか?” その処理がしたいのですが...なかなか..。 "bには、bufni[3] の値が設定されています。"とは値が固定されているということでしょうか? 返信よろしくお願いします。
qmomo

2017/03/30 06:40

4.の”← ここまでが、for 文の処理をします。”と言うの意味はわかりますか? また、"bには、bufni[3] の値が設定されています。"とは、for文では、 a[]はa[1]→a[3]までループされますよね。。それで最後のbufni[3] の値が bに設定されています。
退会済みユーザー

退会済みユーザー

2017/03/30 07:32

返信してくださった”4”番は"switch"を"for"に含めるということでしょうか? "bufni[3]の値が設定される"というのは"tansa"(自作関数)内すべてでという解釈でOKですか 別の点ですが"for(i=1,b=0;i<5;i++)"と変更してみました。
qmomo

2017/03/30 08:36 編集

>返信してくださった”4”番は"switch"を"for"に含めるということでしょうか? はい。そうですが、switch文で、bufni[a]の値が0 の場合、a=0 と言うのがあります。 aの値はループで使用していますので、a<4 の条件を満たせず、ぐるぐると回っちゃいますね。 ただ、、なぜ、switch 文を使うのかが、僕にはわかりませんです。 >"bufni[3]の値が設定される"というのは"tansa"(自作関数)内すべてでという解釈でOKですか 数々のfor文が終わったら,bには何の値が入っているか?考えてみましょう・・ >別の点ですが"for(i=1,b=0;i<5;i++)"と変更してみました。 C言語の配列は0から始まるのではないでしょうか? int bufni[4] = { 1,2,3,4 }; として表示してみてください。 多分エラーが表示されます。 for(i=1,b=0;i<5;i++) { print ("bufni[", %d "]=%d", i, bufni[i] ); }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問