この質問にはすでに答えがあります。
forステートメントが実行されるとき、私はプリインクリメント演算子を使用するので、counter変数の値は1つ増やされなければなりません。
#include <stdio.h>
int main (void)
{
unsigned int counter ;
for ( counter = 1; counter <= 10; ++counter /*here is problem*/) {
printf( "%u\n", counter );
}
}
問題 -
プログラムが実行されると、counter変数の値は最初は2ではなく1になります。
でfor
ループ
for(first statement; second statement; third statement){//...};
一般的に使用される3番目のステートメント更新は各繰り返しの終わりに実行されるので、あなたの変数はcounter
だろう1
最初の反復中に2
最初の繰り返しの終わりに。
あなたがあなたのものを作りたいのならcounter
繰り返しの開始時にインクリメントされる変数、そしてそれを使ってみる++counter
forループの2番目のステートメントでは、次のようになります。
for ( counter = 1; ++counter <= 10;)
理由:
これは、forループはテスト前のループであり、一般に2番目のステートメントである条件が各反復の開始時にチェックされるためです。だから今あなたのcounter
各反復の開始時に増分されます
for文が実行されたとき
forループの3番目のステートメントは最初はチェックされていませんが、forループに指定されている増分演算子または条件を使用していますが、
forループの3番目のステートメントでインクリメント演算子またはデクリメント演算子を使用した場合はループが開始され、forループの3番目のステートメントで条件を使用した場合はプログラムが終了することはなくなり、無限ループが発生します。
カウントを2から始める場合は、forループでcountを次のように初期化する必要があります。
for ( counter = 2; counter <= 10; counter++) {
printf( "%u\n", counter );
}
Cは、次の構文に従います。for loops
:
for ( init; condition; increment ) {
statement(s);
}
ここでのinitの部分はあなたがあなたの初期化をするところです。
++counter
と同じですcounter++
。 - Weather Vanefor ( counter = 1; counter++ <= 10;)
- EOFprintf
。インクリメント式の結果を使用していないので、プレインクリメント演算子を使用してもポストインクリメント演算子を使用しても違いはありません。これは式の値にのみ影響します。x = ++counter;
対x = counter++;
- Tom Karzes