お世話になっております.
今回は,for文内の条件式に関して質問があります.
for(i=0;i<512 && Flag;i++){}
というものなのですが,動きません.
一般的なfor文に条件式を追加し,
FlagがTRUEの間for文を回し続けるためには,
どのような方法がありますでしょうか.
よろしくおねがいします.
for(i=0;i<512;i++){
if( Flag ){return break;}
}
基本的には、その記載内容で合ってはいるのですが…
下記を確認して下さい。
1)Flagの初期値は、TRUEになってますか?
FALSEになっていると、このfor文の中の処理はされません。
2)iの型宣言は?
charになっているとか?少なくともshort以上にしなければなりません。
>というものなのですが,動きません.
「動きません」というのも
具体的にどう動かないのか?
私は不勉強にして、
for(i=0;i<512 && Flag;i++){}
が何語か知らないのですが、C++で、「FlagがTRUEの間」ループを回し続けるなら、
なんで while ではいけないのですか。
> カウチさん
"for文に条件式を追加し,"FlagがTRUEの間ループする方法
が知りたいからでしょう
>FlagがTRUEの間for文を回し続けるためには
for(i=0;i<512;i++){
if( !Flag ){return break;}
}
じゃないか?
return break;
は違うんじゃ?
私もアキラさんの言われるように
>"for文に条件式を追加し,"FlagがTRUEの間ループする方法
のことかと思ってました。実際に使うかどうかと聞かれると
if文入れてしまいますが・・・。
それはそうだけど、
return break;
もおかしいんじゃないかな。
「動きません」が別スレッドでFlagを落としてもループが最後まで回ってしまうというのであれば、
最適化でFlagを検査する処理が消えてしまっているのかも知れません。
いずれにせよ、「動きません」がどういうことかわからないと、問題解決にはならないでしょうね。
for(i=0;i<512 && Flag;i++){}
動かないのなら、
for(i=0;i<512;i++){
if(!Flag){break;}
}
も動かないと思う。
しまった!
> それはそうだけど、
はsさんに大してではありません。
私もmaruさんに1票・・・
開発環境が何も書いてないので何とも言えないのですが、ブレークポイントを
たてる等して、例えばfor分に入る前にFlagの値がFALSEになっていたりしない
かを確認しては?
VCじゃないなら(ここはVC質問版なのでないとは思いますが、MessageBoxや
Printfなどを使って状況を確認するとか。
それからちょっと思ったのですが、Flagを初期化せずにその後フラグに値を
入れないままループに入った場合はちゃんと動かないんじゃ??
まさかそんなことはしてないですよね・・・
>例えばfor分に入る前にFlagの値がFALSEになっていたりしない
>かを確認しては?
3番目で指摘済み!
>3番目で指摘済み!
おぉ、本当だ・・・
失礼しました>_<
みなさん返信ありがとうございました.
アドバイスを頂いていたのに,書き込みが遅れて申し訳ありません.パソコンのHDが壊れてしまい,データを飛ばしてしまいました.
もう一度作り直してみたのですが,上記のfor文でプログラムが動きまました.問題は,別スレッドでflagをTRUEにしていたのですが,そちらの問題だったようです.ご指摘の通り,for文実行の前にflagがTRUEになっていなかったと思います.
どうもありがとうございます.
HDクラッシュは怖いですね.みなさんもお気をつけくださいませm(--)m
老婆心ながら、、、
別スレッドからflag操作しているのであれば
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200508/05080023.txt
を読んでおくと幸せになるかも知れません。
キーワードは"volatile"。
# デバッグビルドで動いていたのが、リリースにしたら動作が変わる、
# というような問題にも対処できるようになるでしょう。
ツイート | ![]() |