- ベストアンサー
for文の継続条件について
----------------------------------------- #include<stdio.h> int main(void) { int i; printf("正の整数を入力してください: "); scanf("%d",&i); for( ; i ; i- -){ printf("%d ",i); } printf("\n"); return 0; } ----------------------------------------- 以上のプログラムで、継続条件の部分を入力した整数にし、例えば「5」を入力すると、 5 4 3 2 1 と表示されます。 例えば、「0<i」といった継続条件ならば、以上のような実行結果になるのはわかるのですが、何故「for( ; i ; i- -)」の「i」という継続条件だけで0より大きい値までを表示してくれるのか分かりません。 何故このようになるのか教えていただけると嬉しいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> for( ; i ; i--){ i ; は、iが非ゼロであるとき、真です。 i != 0 ; と書いたのと、同じ意味です。
その他の回答 (2)
- nda23
- ベストアンサー率54% (777/1415)
既に回答が出ておりますが、条件は全て真か、偽かと言う二者択一 です。コンピュータの世界では古くから次のように定義されて きました。 (1)偽でなければ真である (2)偽を表す値は0である これはC言語に限らず、アセンブラなどでも同じです。 故に、正の整数をカウントダウンして、0になるまでは「真」なので ループが続き、0になると「偽」なので、ループを抜けるという訳 です。負の値を入れたらどうなるか?やってみると分かります。
お礼
ご回答ありがとうございます。 >(1)偽でなければ真である >(2)偽を表す値は0である 以上のご回答により、そうなるとわかりました! 負の値を入れると、ずっと真なので、無限にデクリメントし続けてしまいますね(;^_^)
- bluecampus
- ベストアンサー率66% (138/209)
C言語の条件判断は、値が0の場合は偽、それ以外の場合は真とする から、単に「i」だけでも良いのです。 (マイナスになった場合は真になりますケド) ただ、読みやすさを考えて i > 0 と記述しておいてもよいでしょう。
お礼
ご回答ありがとうございます。 >値が0の場合は偽、それ以外の場合は真とする 以上のご回答により1まで表示されるとわかりました! i > 0という読みやすい記述方法もこれから気をつけて書いていきます!
お礼
ご回答ありがとうございます。 0で偽ということで、このようになっていたんですね! while文では、この真偽での記述方法を良く使うのですが、for文でのこの記述は頭に入っていませんでした。 理解しておきます!