二つのプログラムの違いに関して。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Ouxiy
記事: 165
登録日時: 3ヶ月前

二つのプログラムの違いに関して。

#1

投稿記事 by Ouxiy » 2ヶ月前

以下のプログラムのif文に関してなのですが、

コード:

if (Key[KEY_INPUT_R] == 1 && playerY == enemyY) {

 lock = 1;

 lockonMove = 1;



 }

 if (lockonMove > 0) {

 ++lockonMove;

 }

 if (lockonMove == 10) {

 lockImge = lockonHandle[0];



 }

 else if (lockonMove == 20) {

 lockImge = lockonHandle[1];



 }

 else if (lockonMove == 30) {

 lockImge = lockonHandle[2];





 }

 else if (lockonMove == 40) {

 lockImge = lockonHandle[1];

 lockonMove = 1;

 }



 if (playerY != enemyY) {

 lock = 0;

 lockonMove = 0;

 }

コード:

if (Key[KEY_INPUT_R] == 1 && playerY == enemyY) {

 lock = 1;

 lockonMove = 1;



if (lockonMove > 0) {

 ++lockonMove;

 }

 if (lockonMove == 10) {

 lockImge = lockonHandle[0];



 }

 else if (lockonMove == 20) {

 lockImge = lockonHandle[1];



 }

 else if (lockonMove == 30) {

 lockImge = lockonHandle[2];





 }

 else if (lockonMove == 40) {

 lockImge = lockonHandle[1];

 lockonMove = 1;

 }



 if (playerY != enemyY) {

 lock = 0;

 lockonMove = 0;

 }



 }
のプログラムに関して上のプログラムはループで+1されるのに、下のプログラムは一回+1されるだけと言われたのですがなぜでしょうか。

詳しく説明して頂けるとありがたいです。

アバター
あたっしゅ
記事: 258
登録日時: 9年前
住所: 東京23区
連絡を取る:

Re: 二つのプログラムの違いに関して。

#2

投稿記事 by あたっしゅ » 2ヶ月前

 「上のプログラム」も「下のプログラム」も { と } の数が、あっていません。
日本語に例えると、文章の途中でちぎれたモノを放り出されている感じです。

 ループ部分全部を、再アップしてもらえないと、誰も答えられない模様。
 どこで区切っていいか、わからない場合は、プログラム全体を載せてください。

 それとも、if 文に { } がないと、直後の一文にしか、条件が適応されない、ということなのかな ?
手提鞄あたっしゅ、[MrAtassyu] http://ameblo.jp/mratassyu/
手提鞄屋魚有店(てさげかばんやうおありてん)
レスがついていないものを優先して、レスしています。時々、見当外れなレスをします。

アバター
みけCAT
記事: 6235
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 二つのプログラムの違いに関して。

#3

投稿記事 by みけCAT » 2ヶ月前

あたっしゅ さんが書きました:
2ヶ月前
 「上のプログラム」も「下のプログラム」も { と } の数が、あっていません。
「上のプログラム」も「下のプログラム」も、提示された範囲において { と } の対応は正常に見えます。
あたっしゅさんが「あっていません」とする根拠はなんですか?
最初に表示される範囲だけでなく、提示されたプログラム全体を見て判断しましたか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6235
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: 二つのプログラムの違いに関して。

#4

投稿記事 by みけCAT » 2ヶ月前

Ouxiy さんが書きました:
2ヶ月前
上のプログラムはループで+1されるのに、下のプログラムは一回+1されるだけと言われたのですがなぜでしょうか。
提示されたプログラムにループは含まれていないようですが、
「上のプログラム」ではif (lockonMove > 0)以降が最初のif文のブロックの外にあるので
Key[KEY_INPUT_R] == 1 && playerY == enemyYが真かどうかにかかわらず実行され、
「下のプログラム」ではif (lockonMove > 0)以降が最初のif文のブロックの中にあるので
Key[KEY_INPUT_R] == 1 && playerY == enemyYが真の場合のみ実行される、
というところに理由があると予想できます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Ouxiy
記事: 165
登録日時: 3ヶ月前

Re: 二つのプログラムの違いに関して。

#5

投稿記事 by Ouxiy » 2ヶ月前

みけCATさん、毎度どうもありがとうございます。
読ませて頂きます。

アバター
あたっしゅ
記事: 258
登録日時: 9年前
住所: 東京23区
連絡を取る:

Re: 二つのプログラムの違いに関して。

#6

投稿記事 by あたっしゅ » 2ヶ月前

画面をスクロールさせなかったようです。失礼しました。
手提鞄あたっしゅ、[MrAtassyu] http://ameblo.jp/mratassyu/
手提鞄屋魚有店(てさげかばんやうおありてん)
レスがついていないものを優先して、レスしています。時々、見当外れなレスをします。

かずま

Re: 二つのプログラムの違いに関して。

#7

投稿記事 by かずま » 1ヶ月前

「下のプログラム」を正しく字下げ(インデント)すると、

コード:

	if (Key[KEY_INPUT_R] == 1 && playerY == enemyY) {
		lock = 1;
		lockonMove = 1;
		if (lockonMove > 0) {
			++lockonMove;
		}
		if (lockonMove == 10) {
			lockImge = lockonHandle[0];
		}
		else if (lockonMove == 20) {
			lockImge = lockonHandle[1];
		}
		else if (lockonMove == 30) {
			lockImge = lockonHandle[2];
		}
		else if (lockonMove == 40) {
			lockImge = lockonHandle[1];
			lockonMove = 1;
		}
		if (playerY != enemyY) {
			lock = 0;
			lockonMove = 0;
		}
	}

コード:

		lockonMove = 1;
		if (lockonMove > 0) {
			++lockonMove;
		}
この 3行は lockonMove = 2; と書き直せます。

そのあとの if else if の連続では、lockonMove が
10 か? 20 か? 30 か? 40 か? とチェックしていますが、
lockonMove は 2 ですから、どれにも該当しません。
何の処理もされないので、削除してかまいません。

最初に、if (... && playerY == enemyY) { で
この if 文の中に入っているので playerY == enemyY は真です。
したがって、次のコードは実行されません。

コード:

		if (playerY != enemyY) {
			lock = 0;
			lockonMove = 0;
		}
以上をまとめると、元のプログラムは次のようになります。

コード:

	if (Key[KEY_INPUT_R] == 1 && playerY == enemyY) {
		lock = 1;
		lockonMove = 2;
	}
最初 1 だった lockonMove の値が 2 になるだけですから、
一回 +1されるだけと言われるのは当然です。

返信

“C言語何でも質問掲示板” へ戻る