while文について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
スルメ

while文について

#1

投稿記事 by スルメ » 15年前

初の質問なので注意事項のテンプレートに沿って記述していきます
自分は今C言語にてゲームプログラミングをしようとがんばっています。
そこでゲームプログラミングの館で修行しているのですが
ttp://dixq.net/g/14.html
の[ソースを短く書く①]
でのwhile文で
ProcessMessage()
ClearDrawScreen()
GetHitKeyStateAll( Key )
Key[KEY_INPUT_ESCAPE]
をまとめるということをしていて
なぜこの文になるのかこんがらがってしまい先に進めません。 
while文自体は
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll(Key ) && !Key[KEY_INPUT_ESCAPE] )
なのですが
!は否定という意味なのでwhile文に照らし合わせると
「4つの内どれかひとつが●●でなかっただったときループ」
という風になると思います。
正確に言えば
「ProcessMessageが0以外でなかったとき、又はClearDrawScreenが0以外でなかったとき、………」
となると思います。
そろそろ分からなくなってきましたよぉ><(汗
「4つの内どれかひとつが0でなかったときループ」
だと4命令的にありえません
「4つの内どれかひとつが0以外でなかったときループ」
で考え方はあっていると思うのですが。。。
上記をシンプルにまとめると…
「4つの内どれかひとつが0でなかったときループから外れる」
と言う考え方なのでしょうか?
そうするとwhile文が捻じ曲がってしまうような…

このwhile文構成でどのように解釈すればいいのでしょうか?
↑この一文が今回の本題です。
どなたか助言お願いします。

mnkr

Re:while文について

#2

投稿記事 by mnkr » 15年前

>while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll(Key ) && !Key[KEY_INPUT_ESCAPE] )

>「ProcessMessageが0以外でなかったとき、又はClearDrawScreenが0以外でなかったとき、………」

「&&」の意味は「または」ではなく、「かつ」です。

参考情報
C言語では「真」は「0以外の値」です
http://www.geocities.jp/ky_webid/c/014.html

ProcessMessage()で記述するとエラー(返却値 -1)のときだけループする、となるので
否定の「!」をつけて正常時(返却値 0)にループする、となります。
画像

Dixq (管理人)

Re:while文について

#3

投稿記事 by Dixq (管理人) » 15年前

(1) && (2) && (3)

は「(1)も(2)も(3)も全部満たした時真」となります。

(1) || (2) || (3)

は「(1)または(2)または(3)のどれかが満たした時真」となります。

!(1) && !(2) && !(3)

は「(1)じゃなく(2)じゃなく(3)でもない時真」となります。

!(1) || !(2) || !(3)

は「(1)じゃないか(2)じゃないか(3)じゃない、どれか一つでも当てはまる時真」となります。

ということで今回の場合


プロセスメッセージ関数が異常ではなく、
クリアスクリーンが異常ではなく、
キー入力状態取得関数が異常ではなく、
「エスケープが押されている」ではない時、

全て満たした時条件式全体は真となるわけです。
おわかりいただけたでしょうか?

スルメ

Re:while文について

#4

投稿記事 by スルメ » 15年前

皆さんありがとうございます!!

無事問題(疑問?)を解決することができました^^

0以外が真
ってところがミソでしたね…

又困ったときはよろしくお願いします^^

sizuma

Re:while文について

#5

投稿記事 by sizuma » 15年前

質問内容とは関係ありませんけど、文章は内容の区切りとかで4,5行を目安に改行したほうが見やすくなりますよー

閉鎖

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