0

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になります。


  • ここでは、プレインクリメントでもポストインクリメントでも違いはありません。最初のループが終わるまで起こりません。副作用がないので、++counterと同じですcounter++。 - Weather Vane
  • for ( counter = 1; counter++ <= 10;) - EOF
  • なぜあなたはそれが2であるべきだと思いますか? - immibis
  • 増分コードが実行されます後に各ループ反復すなわち後にprintf。インクリメント式の結果を使用していないので、プレインクリメント演算子を使用してもポストインクリメント演算子を使用しても違いはありません。これは式の値にのみ影響します。x = ++counter;x = counter++; - Tom Karzes
  • このCの質問がJavaの質問の複製としてマークされているのはなぜですか? - Pang

3 답변


1

forループ

for(first statement; second statement; third statement){//...}; 

一般的に使用される3番目のステートメント更新は各繰り返しの終わりに実行されるので、あなたの変数はcounterだろう1最初の反復中に2最初の繰り返しの終わりに。


あなたがあなたのものを作りたいのならcounter繰り返しの開始時にインクリメントされる変数、そしてそれを使ってみる++counterforループの2番目のステートメントでは、次のようになります。

for ( counter = 1; ++counter <= 10;)

理由:

これは、forループはテスト前のループであり、一般に2番目のステートメントである条件が各反復の開始時にチェックされるためです。だから今あなたのcounter各反復の開始時に増分されます


0

for文が実行されたとき

forループの3番目のステートメントは最初はチェックされていませんが、forループに指定されている増分演算子または条件を使用していますが、

forループの3番目のステートメントでインクリメント演算子またはデクリメント演算子を使用した場合はループが開始され、forループの3番目のステートメントで条件を使用した場合はプログラムが終了することはなくなり、無限ループが発生します。


0

カウントを2から始める場合は、forループでcountを次のように初期化する必要があります。

for ( counter = 2; counter <= 10; counter++) {
    printf( "%u\n", counter );
}

Cは、次の構文に従います。for loops

for ( init; condition; increment ) {
   statement(s);
}

ここでのinitの部分はあなたがあなたの初期化をするところです。

リンクされた質問


関連する質問

最近の質問