私は本Let us Cに従っており、次のコードは完全に正しいことが示されています。
for ( i < 4 ; j = 5 ; j = 0 )
printf ( "%d", i ) ;
しかし、Turbo C では 3 つの警告が表示されます。
コードは無効です。割り当てが間違っている可能性があります。「j」には使用されない値が割り当てられています。
このコードがC標準で許可されていることを本が指摘している場合、それは正しいです。i
このコードは、とj
が以前に正しく宣言されていれば (さらにprintf
を含めて) 、C 標準の規則に違反していません#include <stdio.h>
。
ただし、このようなコードは役に立たないため、実際にこのようなコードを作成する人はいません。コードは技術的には許可されていますが、おそらくプログラマーが意図したものではないため、コンパイラが警告を発しているのはそのためです。
このコードが何らかの形で有用であると本が主張している場合、それはおそらくタイプミスです。それは確かに間違っています。その本にこのような間違いがいくつかある場合は、その本を破棄する必要があります。
この例であなたの本が何を教えたいのかわかりませんが、私の知る限り、forループは常に次の形式でなければなりません
for ( init; check; next ) {
/* do something */
}
どこでinit使用するものを初期化し、停止するか続行するかを確認し、次に何らかのアクションを実行します。と同じです
init;
while ( check ) {
/* do something */
next;
}
したがって、次の理由で警告が表示されます。
おそらく本がやりたいことはfor ( i = 5; i < 5; i++ )です。そして、おそらくあなたがしなければならないことは、より良い本を使うことです.
これは有効な C コードですが、ほとんど意味がありません。これにより、ループが適切に初期化されず、無限ループがトリガーされます。ループは次のようになります
for (i = 0; i < 10; i++)
最初のステートメントは初期化子で、2 番目のステートメントは終了ケースを規定し、最後のステートメントはインクリメントです。私はその本を捨てるだろう
これをチェックしてください。
int i=0;
for(i=0;i<5;i++)
{
printf("%d",i);
}
これは正しいが無限ループです。for ループをインスタンス化する正しい方法は次のとおりです。
int i ;
for(i = 0; i< [variable or number];i++){
printf("%d",i);
}
あなたが書いたコードは無意味であり、そのコードでは何もできません。実際には、変更されないため、i 無限時間の値が出力されます。i についてわかっていることは 4 より小さいことだけです。おそらく、出力は常に同じ数値です。