2010-11-19 1 views

答えて

10

ループイニシャライザでは、1つのステートメントしか使用できません。だから、ループの外で、あなたのVARSの少なくとも一つを宣言する必要があります:それは2 int型秒で働いていた場合、あなたはおそらく(複数の変数を宣言しています)一つだけの文ので、有効であるfor (int i = 0, j = 0; ...)を使用

int i; 
double j; 
for (i = 0, j = 0.0f; i <= 30; i++, j++) 

使用されている。

+0

だから、それは(私は0 = int型のため に問題はありませんどのように来ます、 j = 0; i ≦30; i ++、j ++) – Marty

+0

@marty:私の編集を見る – ThiefMaster

0

ループの前にそれらを宣言するのはどうでしょうか?変数宣言のコンマは、同じような型を分離することだけであり、とにかく混乱した読み込みです。言うまでもなく、正確に何が起こるかを知ることは難しくなります。 Btw、浮動小数点数の "++"は技術的に正確な値を返さない(intのように保証されていない)ので、なぜそれが必要なのか不思議です。

int i; 
double j = 0.0f; 
for(i=0; i<=30; i++) { 
    j += 1.0f; 
    // other stuff 
} 

読みやすく、とにかく。おそらく他の人たちのために、それが何をしているのかまだよくわからない。

0

私はObjective-Cのプログラマではないけど、私はforループについて知っていることは、あなたが間にカンマでそのように宣言することができないということです。
int i, double j;は許可されません。ですから、二重整数を使うことを決めることです。
つまり、forループのかっこ内で行ったことを宣言する方法はありません。
int i, j;またはdouble i, jのいずれかを使用してください。

1

forループのイニシャライザ部分は、単一のステートメントにしかなりません。共通の型の複数の変数を1つのステートメントに宣言することができます。 int i, j;ですが、このように異なる型の複数の変数を宣言することはできません。

あなたがfor - ループの本体に両方の値を制限する場合は、あなたがそうのように、単一の複合文で宣言し、forループを囲むことができます。

{ 
    double j = 0.0; 
    for (int i = 0; /*test*/; /*at-end statement*/) { 
     /* body */ 
    } 
} 

あなたも回避することができますこの(これはただの点をあいまいにかかわらず、それはあなたが望むものを正確に行うん)匿名構造体を使用して:

for (struct {int i; double j;} ctx = {0, 0.0}; /*test ctx.i or ctx.j*/; /*at-end*/) { 
    /*body*/ 
} 
関連する問題