for文の条件

[戻る]
悩み中 2008/12/21(日) 21:42:11
Cの話かも知れませんが、for文で条件を自分で決めたい場合
これは問題ないでしょうか?

for(int i=0; i<100; i= Joken())
{
・・・処理
}

int Joken()
{
・・・処理
}

επιστημη [E-Mail] [HomePage] 2008/12/22(月) 06:40:52
べつに問題ないけども、

do {
  ...
} while ( Joken() < 100 ) ;

とドコが違うんだ、と。

Ban 2008/12/22(月) 07:43:37
> とドコが違うんだ、と。
for中でJokenの値(初期値0)を使えることくらいでしょうか。


Joken関数で決めたいのは、
「forから抜ける条件」ですか、
「for内でのiの値」ですか。

背景が分からないのですが、一般的に「for文の条件」っていうと、
前者が想像されるような気がします。
元提示コードは後者ですが、こういう話(前者)ってことでしょうか。

//#include <stdbool.h>

for(int i=0; Joken(i); ++i)
{
・・・処理
}

bool Joken(int n)
{
・・・処理
}

悩み中 2008/12/23(火) 13:28:35
ご回答ありがとうございます。

forのiの条件を決めたいと思ってます。
i++ とかでなくて 処理中にあるときは i+=3となったりと
いう感じです。

for文は一回のループが終わって iに対して Joken()の処理が行われ、
i<100かどうか判断されると考えていてよいでしょうか?

瀬戸っぷ [E-Mail] 2008/12/23(火) 14:23:06
>i++ とかでなくて 処理中にあるときは i+=3となったりと
>いう感じです。

「増分1とは限らないけど加算」ということでよろしいのでしょうか?
とすると、
>for(int i=0; i<100; i= Joken())
の場合、「加算」ではなくJoken()の戻り値を代入していますので
Joken()の処理次第ではiが90だったものが-1とかに変化することもありますが…。

>for文は一回のループが終わって iに対して Joken()の処理が行われ、
>i<100かどうか判断されると考えていてよいでしょうか?

よい…かと思われます。
ただ、最低1回は処理して欲しいのならばεπιστημηさんの書かれた方法の方が
「素直」だと思われますが。
# Joken()の処理にfor()文中のiを渡す必要がないのでしたら。

コード読む方もdo〜whileなら「最低1回は実行される」というのがわかりやすいかと。
for(int i=0; i<100; i= Joken())
の書き方だと、「i += Joken()の書き間違いかな?」と誤解される可能性がありませんか?

たいちう 2008/12/23(火) 23:28:19
トリッキーなforの使い方ですので、可能ならば避けるべきかと。
ていうか、普通は可能なのですが。

// 前処理
int i = 0;

while (true) {
    // 処理
    ...

    // iの更新
    i = Joken();

    // 終了判定
    if (i >= 100) break;
}

悩み中 2008/12/23(火) 23:39:26
[[解決]]
皆様 ありがとうございます!

了解しました。

古いスレッドには追加発言できません。