C中的无限循环

use*_*555 3 c loops for-loop infinite-loop

初学者在这里.为什么这是一个无限循环?

for (p = 0; p < 5; p += 0.5)
{
    printf("p=%2.2f\n",p);
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 8

你看到一个无限循环,因为你的p是一个整数类型(例如a int).无论你添加多少次0.5int,它都将保持为0,因为int截断了分配给它的double/fp值.换句话说,它相当于在每个步骤中添加零的循环.

如果你做p一个float或一个double,你的问题就会消失.

编辑(Oli Charlesworth的评论推荐)

值得注意的是,不鼓励使用浮点数和双精度来控制循环,因为结果并不总是像示例中那样干净.将步长从0.5(2为2的负幂)更改为0.1(不是2的积分负幂)将改变您以相当意外的方式看到的结果.

如果需要迭代非整数步骤,则应考虑使用此简单模式:

// Loop is controlled by an integer counter
for (int i = 0 ; i != 10 ; i++) {
    // FP value is calculated by multiplying the counter by the intended step:
    double p = i * 0.5;
    // p is between 0 and 4.5, inclusive
}
Run Code Online (Sandbox Code Playgroud)