当前位置:嗨网首页>书籍在线阅读

19-for与while

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

5.2.1 for与while

在C++中,for和while循环本质上是相同的。例如,下面的for循环:

for (init-expression; test-expression; update-expression)
{
    statement(s)
}

可以改写成这样:

init-expression;
while (test-expression)
{
    statement(s)
    update-expression;
}

同样,下面的while循环:

while (test-expression)
 body

可以改写成这样:

for ( ;test-expression;)
 body

for循环需要3个表达式(从技术的角度说,它需要1条后面跟两个表达式的语句),不过它们可以是空表达式(语句),只有两个分号是必需的。另外,省略for循环中的测试表达式时,测试结果将为true,因此下面的循环将一直运行下去:

for ( ; ; )
    body

由于for循环和while循环几乎是等效的,因此究竟使用哪一个只是风格上的问题。它们之间存在三个差别。首先,在for循环中省略了测试条件时,将认为条件为true;其次,在for循环中,可使用初始化语句声明一个局部变量,但在while循环中不能这样做;最后,如果循环体中包括continue语句,情况将稍有不同,continue语句将在第6章讨论。通常,程序员使用for循环来为循环计数,因为for循环格式允许将所有相关的信息——初始值、终止值和更新计数器的方法——放在同一个地方。在无法预先知道循环将执行的次数时,程序员常使用while循环。

提示: 在设计循环时,请记住下面几条指导原则。 • 指定循环终止的条件。 • 在首次测试之前初始化条件。 • 在条件被再次测试之前更新条件。 for循环的一个优点是,其结构提供了一个可实现上述3条指导原则的地方,因此有助于程序员记住应该这样做。但这些指导原则也适用于while循环。

错误的标点符号

for循环和while循环都由用括号括起的表达式和后面的循环体(包含一条语句)组成。前面讲过,这条语句可以是语句块,其中包含多条语句。记住,语句块是由花括号,而不是由缩进定义的。例如,请看下面的循环:

i = 0;
while (name[i] != ‘\0’)
      cout << name[i] << endl;
      i++;
cout << "Done\n";

缩进表明,该程序的作者希望i++;语句是循环体的组成部分。然而,由于没有花括号,因此编译器认为循环体仅由最前面的cout语句组成。因此,该循环将不断地打印数组的第一个字符。该程序不会执行i++;语句,因为它在循环的外面。

下面的例子说明了另一个潜在的缺陷:

i = 0;
while (name[i] != ‘\0’); // problem semicolon
{
      cout << name[i] << endl;
      i++;
}
cout << "Done\n";

这一次,代码正确地使用了花括号,但还插入了一个分号。记住,分号结束语句,因此该分号将结束while循环。换句话说,循环体为空语句,也就是说,分号后面没有任何内容。这样,花括号中所有的代码现在位于循环的后面,永远不会被执行。该循环不执行任何操作,是一个死循环。请注意这种分号。