program statement
initial expression;
while (loop condition)
{
program statement
loop expression;
}
for, while 相似,如果能用for寫出來,也可以用while改寫,依照不同的狀況選擇用哪一個,讓程式可讀性較佳。大原則是如果事前知道要做幾次,那用for,反之則使用while。
看個例子,先用while來寫
int theSecretNumber = 77; int yourAnswer = 0; while (yourAnswer != theSecretNumber) { NSLog(@"請猜一個介於1~100的數字"); scanf("%i",&yourAnswer); } NSLog(@"恭喜你猜到了");
改用for,你覺得那個可讀性較好呢??
for (int theSecretNumber = 77,yourAnswer = 0; theSecretNumber != yourAnswer; ) { NSLog(@"請猜一個介於1~100的數字"); scanf("%i",&yourAnswer); } NSLog(@"恭喜你猜到了");
這個例子很像都差不多,Orz.....
就邏輯上來說,因為事先不知道到底猜幾次才會猜中,所以選擇while應該是比較適合的。
do statement
先做了再說,不管while裡頭的判斷如何,起碼做一次
do
program statement
while ( expression);
看個範例:
int main(int argc, const char * argv[]) { @autoreleasepool { BOOL (^ask) (void)= ^{ BOOL answer; char c; NSLog(@"請問你願意被我揍嗎??"); scanf("%c%*c",&c); if (c == 'y') { answer = YES; }else{ answer = NO; } return answer;}; int hitNumber = 0; do { hitNumber++; NSLog(@"揍了第%d拳",hitNumber); } while (ask()==YES); NSLog(@"Game over"); } return 0; }

這個例子中,在還沒有詢問他要不要被揍之前,就先打了,之後才根據他的回答做動作,這邊用了^{Block}實作詢問的行為,以後會再提怎麼用。
break, continue
不管在for 或是while迴圈,都可以使用這兩個關鍵字去控制流程,break直接跳離開迴圈,continue則是以下的這次不執行,但繼續迴圈。
for (int i = 1; i<=5; i++) { NSLog(@"第%d拳",i); if (i==3) { break; } NSLog(@"打中"); }

for (int i = 1; i<=5; i++) { NSLog(@"第%d拳",i); if (i==3) { continue; } NSLog(@"打中"); }

這一篇筆記有點暴力了
沒有留言:
張貼留言