-4

c および c++ で次の for ループを使用することは合法ですか?

for(double d=2.0; d<3.1; d+=0.1)
4

8 に答える 8

8

これは、C99 および C++ の正当な構文です。dそして、ループ内で不適切にいじられない限り、決定論的です (終了する必要があります) 。

ループは実際に終了しますが、ループの反復が正確に何回発生するかは不明です。12 回目の反復で、 の値はd、理論的には にインクリメントされますが、丸めにより (または同様のもの) または (または同様のもの) になる可能性があります3.1。そのため、ループが 11 回反復するか 12 回反復するかは不明です。浮動小数点での正確な一致に依存したくありません。3.099999..3.1000...01

于 2013-09-18T14:12:16.797 に答える
3

次のものも使用できます

for(char c='a'; c<'A'; c+=1)
 printf("%c", c);
于 2013-09-18T14:11:48.697 に答える
1

これは C および C++ では有効ですが、浮動小数点を理解して適切に使用しない限り、期待どおりの動作をしない可能性があります。

丸めにより、 の値がd目的のエンドポイントとわずかに異なる可能性があるため、状況に応じて、ループが 1 回の反復を希望より多かれ少なかれ実行する場合があります。(特に、最も一般的に使用されている浮動小数点形式では、3.1 も .1 も正確に表現できません。ソース テキスト3.1.1は近似値に変換されます。)

通常、ループ制御に整数を使用し、各反復で整数から浮動小数点値を計算するなど、一連の浮動小数点値を使用するループを記述するより良い方法があります。(代わりに、ループ制御に浮動小数点オブジェクトを使用できますが、ループ式には整数値のみを使用するように注意してください。)

于 2013-09-18T14:15:07.243 に答える
1

はい、制限はありません。C++ では、反復子を使用して for ループを作成することも非常に一般的です。

于 2013-09-18T14:11:23.523 に答える
0

C++ (Microsoft VC++) では、これで問題ありません。

ただし、cでは、変数dを事前に、つまり関数の先頭で宣言する必要があると思います。

于 2013-09-18T14:12:44.720 に答える
0

cでは合法のようです!! ループ外で変数 d を宣言することもできます。

于 2013-09-18T14:18:38.363 に答える