• ベストアンサー

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までのカウントダウンがとまるのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

C における「条件判断」は, 常に「そこに書かれた式が 0 か 0 でないか」です. 例えば, 条件に「i > 5」と書かれていたら, 普通は「i が 5 より大きいかどうか」と読むわけですが, 厳密には「i > 5 という式が 0 を返すかどうか」という判定です. 比較演算子は条件が成り立てば 1, 成り立たなければ 0 を返すので, 前者のように素直に読むことができるというわけです.

szatmari
質問者

お礼

回答ありがとうございます。 C における「条件判断」は, 常に「そこに書かれた式が 0 か 0 でないか」です. 式よりもその式の評価がなされるのですね。納得しました。

その他の回答 (3)

  • BLK314
  • ベストアンサー率55% (84/152)
回答No.4

これはC/C++系の常識なので、 (ここで質問する前に) 本来はしっかり学習しておきたい事項なのですが... C/C++では0がFALSE, それ以外がTRUEと定められています。 ですからi--はiが0でない間、今回でいえば正の間はTRUEに評価され ループを続行するのです。そして0になったらFALSEと評価され、 ループの実行を終えるのです。

szatmari
質問者

お礼

回答ありがとうございます。

  • kiwa67
  • ベストアンサー率22% (82/357)
回答No.2

判定部は、0 ならループ終了 0 でなければ、ループ続行です。 判定部が i のみということは、 i の内容が 0 でないかぎりループするということです。 このプログラム非正値を入力されたらループ抜けませんね。 なので、判定部は   i > 0 のほうがいいと思います。

szatmari
質問者

お礼

回答ありがとうございます。

noname#130082
noname#130082
回答No.1

iが0のときは、0は偽と判定されてfor文の中身は実行されずfor文は終了します。ということで、iが1のときまでfor文の中身が実行されることになります。 ただし、人間は言うことを聞くとは限らないので、データが負の数でないことをチェックした方がよいプログラムになると思いますが・・・。

szatmari
質問者

お礼

回答ありがとうございます。

関連するQ&A

専門家に質問してみよう