for文の条件式の追加方法

解決


Dennis  2008-07-22 19:47:40  No: 68758  IP: 192.*.*.*

お世話になっております.
今回は,for文内の条件式に関して質問があります.

for(i=0;i<512 && Flag;i++){}
というものなのですが,動きません.
一般的なfor文に条件式を追加し,
FlagがTRUEの間for文を回し続けるためには,
どのような方法がありますでしょうか.

よろしくおねがいします.

編集 削除
ポテチ  2008-07-22 20:36:37  No: 68759  IP: 192.*.*.*

for(i=0;i<512;i++){
    if( Flag ){return break;}
}

編集 削除
ん?  2008-07-22 21:08:30  No: 68760  IP: 192.*.*.*

基本的には、その記載内容で合ってはいるのですが…
下記を確認して下さい。

1)Flagの初期値は、TRUEになってますか?
  FALSEになっていると、このfor文の中の処理はされません。

2)iの型宣言は?
  charになっているとか?少なくともshort以上にしなければなりません。

編集 削除
rin  2008-07-23 08:45:16  No: 68761  IP: 192.*.*.*

>というものなのですが,動きません.
「動きません」というのも
具体的にどう動かないのか?

編集 削除
カウチ  2008-07-23 09:20:54  No: 68762  IP: 192.*.*.*

私は不勉強にして、

for(i=0;i<512 && Flag;i++){}

が何語か知らないのですが、C++で、「FlagがTRUEの間」ループを回し続けるなら、
なんで while ではいけないのですか。

編集 削除
アキラ  URL  2008-07-23 13:01:08  No: 68763  IP: 192.*.*.*

> カウチさん

"for文に条件式を追加し,"FlagがTRUEの間ループする方法
が知りたいからでしょう

編集 削除
ジャガビー  2008-07-23 20:52:55  No: 68764  IP: 192.*.*.*

>FlagがTRUEの間for文を回し続けるためには

for(i=0;i<512;i++){
    if( !Flag ){return break;}
}

じゃないか?

編集 削除
s  2008-07-23 21:14:06  No: 68765  IP: 192.*.*.*

return break;
は違うんじゃ?

私もアキラさんの言われるように
>"for文に条件式を追加し,"FlagがTRUEの間ループする方法
のことかと思ってました。実際に使うかどうかと聞かれると
if文入れてしまいますが・・・。

編集 削除
maru  2008-07-23 21:23:04  No: 68766  IP: 192.*.*.*

それはそうだけど、
return break;
もおかしいんじゃないかな。

「動きません」が別スレッドでFlagを落としてもループが最後まで回ってしまうというのであれば、
最適化でFlagを検査する処理が消えてしまっているのかも知れません。

いずれにせよ、「動きません」がどういうことかわからないと、問題解決にはならないでしょうね。
for(i=0;i<512 && Flag;i++){}
動かないのなら、
for(i=0;i<512;i++){
    if(!Flag){break;}
}
も動かないと思う。

編集 削除
maru  2008-07-23 21:25:15  No: 68767  IP: 192.*.*.*

しまった!
> それはそうだけど、
はsさんに大してではありません。

編集 削除
どら  2008-07-24 09:42:36  No: 68768  IP: 192.*.*.*

私もmaruさんに1票・・・
開発環境が何も書いてないので何とも言えないのですが、ブレークポイントを
たてる等して、例えばfor分に入る前にFlagの値がFALSEになっていたりしない
かを確認しては?

VCじゃないなら(ここはVC質問版なのでないとは思いますが、MessageBoxや
Printfなどを使って状況を確認するとか。

それからちょっと思ったのですが、Flagを初期化せずにその後フラグに値を
入れないままループに入った場合はちゃんと動かないんじゃ??
まさかそんなことはしてないですよね・・・

編集 削除
通りすがり  2008-07-24 09:44:44  No: 68769  IP: 192.*.*.*

>例えばfor分に入る前にFlagの値がFALSEになっていたりしない
>かを確認しては?
3番目で指摘済み!

編集 削除
どら  2008-07-24 13:11:07  No: 68770  IP: 192.*.*.*

>3番目で指摘済み!

おぉ、本当だ・・・
失礼しました>_<

編集 削除
Dennis  2008-07-31 19:27:41  No: 68771  IP: 192.*.*.*

みなさん返信ありがとうございました.
アドバイスを頂いていたのに,書き込みが遅れて申し訳ありません.パソコンのHDが壊れてしまい,データを飛ばしてしまいました.

もう一度作り直してみたのですが,上記のfor文でプログラムが動きまました.問題は,別スレッドでflagをTRUEにしていたのですが,そちらの問題だったようです.ご指摘の通り,for文実行の前にflagがTRUEになっていなかったと思います.

どうもありがとうございます.
HDクラッシュは怖いですね.みなさんもお気をつけくださいませm(--)m

編集 削除
maru  2008-07-31 20:21:59  No: 68772  IP: 192.*.*.*

老婆心ながら、、、

別スレッドからflag操作しているのであれば
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200508/05080023.txt
を読んでおくと幸せになるかも知れません。
キーワードは"volatile"。

# デバッグビルドで動いていたのが、リリースにしたら動作が変わる、
# というような問題にも対処できるようになるでしょう。

編集 削除