5.3 do语句

迄今为止,本章讨论的这两个循环结构都要在循环开始前测试一组条件。因此,如果条件不满足,那么可能永远不会执行循环体。开发程序时,有时需要在循环结尾(而不是在开始)处执行测试。很自然,Objective-C语言也提供了专门的语言结构用于处理这种情况,即do语句。该语句的语法如下:


do

program statement

while(expression);


do语句按以下过程执行:首先,执行program statement。其次,求圆括号中expression的值。如果expression的求值结果为TRUE,循环将继续,并再次执行program statement。只要expression的计算结果始终为TRUE,就将重复执行program statement。当表达式求出的值为FALSE时,循环将终止并以正常顺序执行程序中的下一条语句。

do语句只是while语句的简单转置,它把循环条件放在循环的结尾而不是开头。

代码清单5-8使用while语句来翻转数字中的各个位。回到这个程序,并确定如果用户键入0而不是13579将会发生什么。在这种情况下,while循环中的语句将永远不会执行,输出中什么也不会显示。如果用do语句代替while语句,可确保程序循环要至少执行一次,从而保证在所有情况下都至少显示一个数字。代码清单5-9展示了如何使用do语句。

代码清单5-9


//Program to reverse the digits of a number

import<Foundation/Foundation.h>

int main(int argc, char*argv[])

{

NSAutoreleasePool*pool=[[NSAutoreleasePool alloc]init];

int number, right_digit;

NSLog(@“Enter your number.”);

scanf(“i”,&number);

do{

right_digit=number%10;

NSLog(@“i”,right_digit);

number/=10;

}

while(number!=0);

[pool drain];

return 0;

}


代码清单5-9输出


Enter your number.

135

5

3

1


代码清单5-9输出(重新运行)


Enter your number.

0

0


从该程序的输出可以看到,向程序键入0时,程序就会正确地显示数字0。