-5

私はそれが生成すると予想しました:

10 5 3 2 1

しかし、代わりに印刷します

10 5 3 2 1 1 1 1 1 1 1 1 1...

なんで?

#include <stdio.h>

int main(void)
{
    int i;

    for(i = 10; i >= 1; i /= 2)
        printf("%d ", i++);

    return 0;
}

2が出力され、1が追加されて3になり、2で割ると1になります。1は1に等しいので、1を出力してから1を追加して2にし、2で割ると0になります。0は1より小さいため、ループは終了する必要があります。

4

3 に答える 3

2

iが 1 の場合は、printfステートメントと一緒に出力します。次に、(ステートメントの演算子をi介して)インクリメントされます。次に、 が実行され、どの結果がどの結果にどの結果が. これは条件を満たし、無限ループになります。++printfi /= 2i = 2 / 21i >= 1

于 2015-03-04T02:51:38.733 に答える
1

i は 2 にインクリメントされ続け、2 で除算され、無限ループが生成されます。

于 2015-03-04T03:44:34.693 に答える
1

i /= 2なると1、ループの本体が出力され1、 だけインクリメントiされ1ます。i /= 2これにより、未満の値は決して許可されない1ため、ループの値はi無限に繰り返されます。

于 2015-03-04T02:52:42.983 に答える