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

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

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

#1

投稿記事 by Ouxiy » 4年前

以下のプログラムの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されるだけと言われたのですがなぜでしょうか。

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

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

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

#2

投稿記事 by あたっしゅ » 4年前

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

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

 それとも、if 文に { } がないと、直後の一文にしか、条件が適応されない、ということなのかな ?
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

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

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

#3

投稿記事 by みけCAT » 4年前

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

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

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

#4

投稿記事 by みけCAT » 4年前

Ouxiy さんが書きました:
4年前
上のプログラムはループで+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
記事: 173
登録日時: 4年前

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

#5

投稿記事 by Ouxiy » 4年前

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

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

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

#6

投稿記事 by あたっしゅ » 4年前

画面をスクロールさせなかったようです。失礼しました。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

かずま

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

#7

投稿記事 by かずま » 4年前

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

コード:

	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言語何でも質問掲示板” へ戻る