for文の条件式の追加方法

解決


Dennis  2008-07-23 04:47:40  No: 68758

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

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

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


ポテチ  2008-07-23 05:36:37  No: 68759

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


ん?  2008-07-23 06:08:30  No: 68760

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

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

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


rin  2008-07-23 17:45:16  No: 68761

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


カウチ  2008-07-23 18:20:54  No: 68762

私は不勉強にして、

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

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


アキラ  URL  2008-07-23 22:01:08  No: 68763

> カウチさん

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


ジャガビー  2008-07-24 05:52:55  No: 68764

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

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

じゃないか?


s  2008-07-24 06:14:06  No: 68765

return break;
は違うんじゃ?

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


maru  2008-07-24 06:23:04  No: 68766

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

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

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


maru  2008-07-24 06:25:15  No: 68767

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


どら  2008-07-24 18:42:36  No: 68768

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

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

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


通りすがり  2008-07-24 18:44:44  No: 68769

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


どら  2008-07-24 22:11:07  No: 68770

>3番目で指摘済み!

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


Dennis  2008-08-01 04:27:41  No: 68771

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

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

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


maru  2008-08-01 05:21:59  No: 68772

老婆心ながら、、、

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加