for ループ文とそれに続く式がわかりません。私が理解するのを手伝ってください。
#include<stdio.h>
int main()
{
int x = 1;
int y = 1;
for( ; y ; printf("%d %d\n",x,y))
y = x++ <= 5;
return 0;
}
そして、私が得た出力
2 1
3 1
4 1
5 1
6 1
7 0
for ループ文とそれに続く式がわかりません。私が理解するのを手伝ってください。
#include<stdio.h>
int main()
{
int x = 1;
int y = 1;
for( ; y ; printf("%d %d\n",x,y))
y = x++ <= 5;
return 0;
}
そして、私が得た出力
2 1
3 1
4 1
5 1
6 1
7 0
y = x++ <= 5;
==> y = (x++ <= 5);
==> まず と比較x
して、 が小さいか等しい5
かどうかを確認します。の結果は、に割り当てられます、x
5
(x++ <= 5)
1
0
y
x
>5
に(x++ <= 5)
なると0
、そうにy = 0
なり、条件false
とループが壊れ、
変数を初期化します。
int x = 1; int y = 1;
-13
のステートメントがあります。for loop
Initialize, 2. Condition, 3. Iteration:increment/decrement
あなたの場合、initialize 条件を指定しませんでしたが、条件とインクリメントの部分があります。for ループが正しい方法で使用されているとは思いません。
次のように、増分の部分を体と交換する必要があります。
for(; y; y = x++ <= 5;)
printf("%d %d\n", x, y)
まず、条件が真かどうか、真かどうかを確認しますy
。次に、印刷x
しy
て出力します。次に、インクリメントの部分が実行されるx++ <= 5
かどうか。結果は に割り当てられy
ます。あなたの条件が偽になるまでそうしますy
== false
。
注:適切なプログラミングのために、中かっこで体を囲む必要があります。
基本的に、for 構文は次のとおりです。 for(StartCondition; Test; PostLoopOperation) DoWhileTestPasses;
この場合:
StartCondition == None
Test == (y != 0)
PostLoopOperation == do some printing
DoWhileTestPasses == set y to zero if x > 5 otherwise to non-zero THEN increment x.
紛らわしいので、これはかなり悪い習慣です。
次のように書くとよいでしょう:
int x=0;
int y=0;
for(y=0; y = (x <= 6); x++)
{
printff("%d %d\n",x,y);
}
return(0);
y = x++ <= 5;
にはy
、条件によって出力される値が格納されますx++ <= 5
(ここでx++
はポスト インクリメント)。条件が true の場合、y = 1
else y = 0
.
for( ; y ; printf("%d %d\n",x,y))
for ループでは、for ループ本体の実行後の値をx
出力しています。y
これに似ている
int x = 1;
for( int y = 1; y!=0 ; )
{
if (x++ <= 5)
{
y = 1;
}
else
{
y = 0;
}
printf("%d %d\n",x,y);
}
おそらく、このわずかに変換された (ただし機能的には同等の) コードが役立ちます。
int x = 1;
int y = 1;
while (y) {
y = (x <= 5);
x = x + 1;
printf("%d %d\n", x, y)
}