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

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

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

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

Q&A

解決済

1回答

1054閲覧

if文での処理結果が表示されない

shiny0315

総合スコア2

C

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

0グッド

0クリップ

投稿2021/12/23 18:59

前提・実現したいこと

以下の部分で示す内容を処理結果に反映させたい

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

if文で分岐を設けたところ設ける前に処理結果に表示されていた内容が表示されなくなった。

該当のソースコード

if文分岐挿入前のソースコード

while(NODE[0].data[0]

1 for (M = 0; M < NODEMAX; M++) { 2 ram = (double)rand() / RAND_MAX; 3 if (ram <= 0.25) { 4 if (NODE[M].x != X_MAX) { 5 NODE[M].x += 1; 6 } 7 } 8 else if (ram <= 0.5) { 9 if (NODE[M].x != 0) { 10 NODE[M].x -= 1; 11 } 12 } 13 else if (ram <= 0.75) { 14 if (NODE[M].y != Y_MAX) { 15 NODE[M].y += 1; 16 } 17 } 18 else { 19 if (NODE[M].y != 0) { 20 NODE[M].y -= 1; 21 } 22 } 23 24 while (T < NODEMAX) { 25 for (A = T + 1; A < NODEMAX; A++) { 26 if (abs(NODE[T].x - NODE[A].x) <= DISTANCE && abs(NODE[T].y - NODE[A].y) <= DISTANCE) { //ノード同士の距離を比較 27 for (int S = 0; S < NODEMAX; S++) { 28 if (NODE[T].data[S] != NODE[A].data[S]) { //お互いにデータを比較し、どちらかがデータを持っていて、どちらかがデータを持っていない状態のとき 29 if (NODE[T].data[S] == 0) { //データを持っていなかった方に新しくデータを受けっとたとみなすために2をいれる 30 NODE[T].data[S] = 2; 31 } 32 else if (NODE[A].data[S] == 0) { //データを持っていなかった方に新しくデータを受けっとたとみなすために2をいれる 33 NODE[A].data[S] = 2; 34 } 35 } 36 } 37 } 38 } 39 T ++; 40 } 41 42 T = 0; 43 44 for (int V = 0; V < NODEMAX; V++) { //新しく受け取ったデータを次のクールタイムで処理できるようにデータを2から1にする。 45 for (int X = 0; X < NODEMAX; X++) { 46 if (NODE[V].data[X] == 2) { 47 NODE[V].data[X] = 1; 48 } 49 } 50 } 51 } 52 53 time += 1; 54 printf("回数%d\n", time); 55 56 } 57 58``` 59挿入後のソースコード 60```while (NODE[0].data[0] == 0) { 61 for (M = 0; M < NODEMAX; M++) { 62 ram = (double)rand() / RAND_MAX; 63 if (ram <= 0.25) { 64 if (NODE[M].x != X_MAX) { 65 NODE[M].x += 1; 66 } 67 } 68 else if (ram <= 0.5) { 69 if (NODE[M].x != 0) { 70 NODE[M].x -= 1; 71 } 72 } 73 else if (ram <= 0.75) { 74 if (NODE[M].y != Y_MAX) { 75 NODE[M].y += 1; 76 } 77 } 78 else { 79 if (NODE[M].y != 0) { 80 NODE[M].y -= 1; 81 } 82 } 83 84 while (T < NODEMAX) { 85 for (A = T + 1; A < NODEMAX; A++) { 86 if (NODE[T].CT == 0 && NODE[A].CT == 0) { 87 printf("ノード%dのCT%d,ノード%dのCT%d", T, NODE[T].CT, A, NODE[A].CT); 88 if (abs(NODE[T].x - NODE[A].x) <= DISTANCE && abs(NODE[T].y - NODE[A].y) <= DISTANCE) { //ノード同士の距離を比較 89 for (int S = 0; S < NODEMAX; S++) { 90 if (NODE[T].data[S] != NODE[A].data[S]) { //お互いにデータを比較し、どちらかがデータを持っていて、どちらかがデータを持っていない状態のとき 91 if (NODE[T].data[S] == 0) { //データを持っていなかった方に新しくデータを受けっとたとみなすために2をいれる 92 NODE[T].data[S] = 2; 93 } 94 else if (NODE[A].data[S] == 0) { //データを持っていなかった方に新しくデータを受けっとたとみなすために2をいれる 95 NODE[A].data[S] = 2; 96 } 97 } 98 } 99 100 NODE[T].CT ++; 101 NODE[A].CT ++; 102 103 } 104 } 105 else if (NODE[T].CT != CT_MAX && NODE[A].CT != CT_MAX) { 106 NODE[T].CT++; 107 NODE[A].CT++; 108 } 109 else if (NODE[T].CT == CT_MAX && NODE[A].CT != CT_MAX) { 110 NODE[T].CT = 0; 111 NODE[A].CT++; 112 } 113 else if (NODE[T].CT != CT_MAX && NODE[A].CT == CT_MAX) { 114 NODE[T].CT ++; 115 NODE[A].CT = 0; 116 } 117 else { 118 NODE[T].CT = 0; 119 NODE[A].CT = 0; 120 } 121 T++; 122 } 123 } 124 125 T = 0; 126 127 for (int V = 0; V < NODEMAX; V++) { //新しく受け取ったデータを次のクールタイムで処理できるようにデータを2から1にする。 128 for (int X = 0; X < NODEMAX; X++) { 129 if (NODE[V].data[X] == 2) { 130 NODE[V].data[X] = 1; 131 } 132 } 133 } 134 } 135 136 time += 1; 137 printf("回数%d\n", time); 138 139 } 140``` 141 142 143### 補足情報(FW/ツールのバージョンなど) 144Visual Studio 2022

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

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

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

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

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

hoshi-takanori

2021/12/23 20:22

何をするコードなのかさっぱり分かりませんが、パッと見たところ、T++; の位置が変わってる (for の外か中か) のが気になりますね…。
episteme

2021/12/23 21:54 編集

追加したのは if (NODE[T].CT == 0 && NODE[A].CT == 0) { ... } ですか? 直後にある printf("ノード%dのCT%d,ノード%dのCT%d", T, NODE[T].CT, A, NODE[A].CT); をその if ( ... ) の直前に移動したとき、NODE[T].CT, NODE[T].CT は妥当な値(どちらも0) となっていますか?
thkana

2021/12/23 22:00

処理を変えたのなら結果が変わって当然でしょう? その質問の文章では「何」が問題なのかわかりません。 (単に「ごちゃごちゃ」になっているのを落ち着いてほどくだけの話だと思いますが...)
episteme

2021/12/23 22:43

↑まぁ、現時点では「デバッグの丸投げ」と受け取られてもしゃーないですわね。
thkana

2021/12/24 01:06

> 「デバッグの丸投げ」と受け取られてもしゃーない それ以外の何の可能性があるのでしょう? (ってそれは質問者さんが説明するべきことでしょうけれど)
guest

回答1

0

ベストアンサー

T++の位置が誤っていませんか?
-が現在の位置
+が正しい位置

diff

1 58 NODE[T].CT = 0; 2 59 NODE[A].CT = 0; 3 60 } 4- 61 T++; 5- 62 } 6+ 61 } 7+ 62 T++; 8 63 } 9 64 10 65 T = 0;

投稿2021/12/24 00:23

tatsu99

総合スコア5493

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.39%

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

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

質問する

関連した質問