0
for(i=0; 0; i)
{
    //statement
}

ステートメントが 1 回だけ実行されるのはなぜですか? ステートメントを実行しないか、ステートメントが無限ループに入る必要があります。ただし、ステートメントは 1 回だけ実行されます。手伝ってくれませんか。

4

5 に答える 5

5

実際には、その行はステートメントを実行しません。私はあなたのプログラムをもう一度見て、他のいくつかの出力/ステートメントがブロック内のステートメントの出力として誤認されていないかどうかを確認します

#include <stdio.h>

int main(int argc, char** argv)
{
  int i;
  for (i = 0; 0; i) {
    printf("i is %d\n", i);
  }
  return 0;
}

実行すると出力が生成されません。

もう1つの可能性は、ソースコードがバイナリと同期していないことです。これは、手動でロールされたCビルドシステムで時折発生します。.oオブジェクトファイルと生成されたバイナリを削除し、最初から再コンパイルしてみてください。実行が消えた場合は、ビルドをどのように達成するかをもう少し注意深く検討する必要があります。

于 2012-09-10T17:08:38.627 に答える
5

for ループの後にセミコロンがないことを確認してください。そうしないと、コンパイラはセミコロンをループの終わりと見なし、次の中括弧内のすべてが 1 回実行されます。

for(i=0; 0; i); // end of loop

{
   // do something once
}

あなたの例にはセミコロンがありませんが、プログラミングコースでこれを頻繁に行う人を見てきました.1回実行されるという事実は、この間違いの兆候です. ただの提案です。

于 2012-09-10T17:17:13.003 に答える
1

これは、for ループに関する C99 標準からの引用です。

6.8.5.3 The for statement 1 The statement

for ( 句-1 ; 式-2 ; 式-3 )

式 expression-2 は、ループ本体の各実行前に評価される制御式です。式 expression-3 は、ループ本体の各実行後に void 式として評価されます。clause-1 が宣言である場合、それが宣言する変数の有効範囲は、残りの宣言とループ全体 (他の 2 つの式を含む) です。制御式の最初の評価の前の実行順序で到達します。句-1 が式の場合、制御式の最初の評価の前に void 式として評価されます。134)

条件が偽なので、一度も実行してはいけません。したがって、使用しているコンパイラのバグであることは明らかです。

于 2012-09-10T17:13:22.117 に答える
0

試す

for (i = 0; i < 10; i++)

次に、Googleでforループを検索します。forループには3つの部分があります

初期化; ループ終了条件; インクリメント。

あなたのコードが言う理由は、おそらくあなたが言っていることではありません。

于 2012-09-10T17:08:23.090 に答える
0

終了条件が0、つまりfalseであるため、このループは1回も実行されません。

for(i=0; 0; i)
{
  printf("%d",&i)
}

何も印刷しません。

于 2012-09-10T17:09:26.023 に答える