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。