プロが教えるわが家の防犯対策術!

for文なのですが、

scanfで得た、 iを
for文のi--で、一づつへらしてますが、
0でfor文がおわりますが
0で終わりの記述がない気がするんですが、

どうしてでしょか?

int main(void)
{
   int i;
   printf("正の整数を入力してください。\n");
   scanf("%d",&i);
   for( ; i ; i--)
   printf("qが入力されました。\n");
   return 0;
}

A 回答 (2件)

 C系の言語では「比較式も計算式の一種」という考え方をします。



 たとえば、"i < 0" というのは、「この式が成立しているかを表す数値」を返す計算式です。
 成立していない場合は 0 で、成立している場合は 1 を返します。

 if や for の比較構文では、最終的に数値を返す式を書いてあげれば動作するため、for 文は i の中身を見て「何らかの比較が行われた」と勘違いし、普通に動作します。

 具体的には、i の中に 0 が入っていると比較式が未成立とみなしてループを抜け、それ以外の場合は比較式が成立しているとみなして printf() を実行します。
    • good
    • 0
この回答へのお礼

詳しい解説ありがとうございます。
よくわかりました。

お礼日時:2006/10/12 11:26

   for( ; i /*ココ*/ ; i--)


"ココ"が真である間繰り返します。
"i が真である" とは "iが0でない" こと。
なので iが0でない間繰り返します。
つまり iが0になったらループを脱出します。
    • good
    • 0
この回答へのお礼

なるほど!わかりやすいです。
ありがとうございました。

お礼日時:2006/10/12 11:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!