迭代语句

  循环可以用for、while或者do语句表述

    while(condition) statement
    do statement while(condition);
    for(for-init-statement condition; expression) statement

这些语句中的每一个都将反复执行一个称为受控语句或者循环体的语句(statement),直到条件(condition)变成假,或者程序员要求以其他方式跳出这个循环。

  for语句是为了表述最规范的循环形式。循环变量、结束条件(condition),以及更新循环变量的表达式(expression)都可以在“最前面”的一行里描述。这样可以极大地提高可读性,也会减少出错的频度。如果不需要初始化,初始化语句可以为空。如果忽略了条件部分,那么这个for语句就将永远循环下去,除非用户明确地通过break、return、goto、throw或者某些不那么明显的方式,例如调用exit()(9.4.1.1节),从循环中退出来。如果忽略了表达式部分,我们就必须在循环体里以某种方式更新循环变量。如果一个循环不是简单的“引进一个循环变量、检测条件、更新循环变量”类型的,那么最好是用while语句描述。for语句也经常被用于描述没有明确结束条件的循环:

    for(;;) {    // "永远"
        // ...
    }

一个while语句简单地执行受其控制的语句,直到它的条件变成false。对于那些没有明确的循环变量,或者对循环变量的更新自然地出现在循环体的中间时,我更偏向于采用while语句而不是for语句。

输入循环就是一种没有明确的循环变量的循环:

    while(cin >> ch) // ...

按照我的经验,do语句是错误和混乱的一个根源。究其原因,缘于它在条件求值之前总要执行循环体一次。然后,要使循环体正确工作,一定会有一些很像条件的东西必须在第一次到达时就成立。但与我的揣测不同,我发现更经常的情况是这种条件并不像所预期的那样成立,无论是在程序的第一次写出和调试时,还是在它前面的代码被修改之后。我也更喜欢有关条件“位于前面,使我能够看到它”。由于这些,我尽量避免do语句。

🔚