For循环返回**值。请解释

时间:2014-10-09 22:42:10

标签: c++

有人可以解释为什么以下代码的输出是**

#include <iostream>
using namespace std;

int main()
{
    for (float val = -10.0; val < 100; val = -val * 2)
    {
        if (val < 0 && -val >= 40)
            break;
        cout << "*";
    }
    return 0;
}

请你一点一点地解释一下吗?非常感谢

2 个答案:

答案 0 :(得分:0)

当你的循环迭代三次,但cout语句只执行两次,你得到的输出为**。

迭代1:val = -10.0 (For循环条件为true且block为false)

迭代2:val = 20.0 (For循环条件为true,如果block为false)

迭代3:val = -40.0 (For循环条件为true,但如果block为true)

因此,在第三次迭代时,如果条件变为真,则循环退出。

答案 1 :(得分:0)

  • 迭代1
    • val是-10
    • if ((-10 < 0) && (+10 >= 40))是假的
      • 所以它不会突破循环
    • *已打印
    • 循环条件:(-10 < 100)为真
      • 所以循环继续
    • 然后更新
    • val:val = -val * 2
      • val = +10*2 = 20
  • 迭代2
    • val是20
    • 由于if为假,
    • (20 < 0)语句短路为false
      • 所以它不会突破循环
    • *已打印
    • 循环条件:(20 < 100)为真
      • 所以循环继续
    • 然后更新
    • val
      • val = -20*2 = -40
  • 迭代3
    • val是-40
    • if((-40 < 0) && (+40 >= 40))是真的
      • 所以它会在再次打印之前突破循环