- ベストアンサー
forループ
#include<stdio.h> int main(int argc, char** argv) { int i; printf("正の整数を入力してください。\n"); scanf("%d",&i); for(;i;i--) { printf("%d\n",i); } return 0; } このプログラムの判定部がiだけなのがわかりません。どうしてこれで1までのカウントダウンがとまるのでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
C における「条件判断」は, 常に「そこに書かれた式が 0 か 0 でないか」です. 例えば, 条件に「i > 5」と書かれていたら, 普通は「i が 5 より大きいかどうか」と読むわけですが, 厳密には「i > 5 という式が 0 を返すかどうか」という判定です. 比較演算子は条件が成り立てば 1, 成り立たなければ 0 を返すので, 前者のように素直に読むことができるというわけです.
その他の回答 (3)
- BLK314
- ベストアンサー率55% (84/152)
これはC/C++系の常識なので、 (ここで質問する前に) 本来はしっかり学習しておきたい事項なのですが... C/C++では0がFALSE, それ以外がTRUEと定められています。 ですからi--はiが0でない間、今回でいえば正の間はTRUEに評価され ループを続行するのです。そして0になったらFALSEと評価され、 ループの実行を終えるのです。
お礼
回答ありがとうございます。
- kiwa67
- ベストアンサー率22% (82/357)
判定部は、0 ならループ終了 0 でなければ、ループ続行です。 判定部が i のみということは、 i の内容が 0 でないかぎりループするということです。 このプログラム非正値を入力されたらループ抜けませんね。 なので、判定部は i > 0 のほうがいいと思います。
お礼
回答ありがとうございます。
iが0のときは、0は偽と判定されてfor文の中身は実行されずfor文は終了します。ということで、iが1のときまでfor文の中身が実行されることになります。 ただし、人間は言うことを聞くとは限らないので、データが負の数でないことをチェックした方がよいプログラムになると思いますが・・・。
お礼
回答ありがとうございます。
お礼
回答ありがとうございます。 C における「条件判断」は, 常に「そこに書かれた式が 0 か 0 でないか」です. 式よりもその式の評価がなされるのですね。納得しました。