2011-09-20 180 views
1

在下面的Objective-C代碼中,當第一個內部'if'語句滿足(true)時,這是否意味着循環終止並轉到下一個語句?'for'語句中的'If'語句

此外,當它執行一次後返回到內部'for'語句時,p的值是否再次爲2,爲什麼?

// Program to generate a table of prime numbers 

#import <Foundation/Foundation.h> 

int main (int argc, char *argv[]) 
{ 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    int p, d, isPrime; 

    for (p = 2; p <= 50; ++p) { 
     isPrime = 1; 

     for (d = 2; d < p; ++d) 
      if (p % d == 0) 
       isPrime = 0; 

     if (isPrime != 0) 
      NSLog (@」%i ", p); 
} 

[pool drain]; 
return 0; 
} 

在此先感謝。

+1

最好的做法是總是在你的'for'和'if'語句中使用大括號,這會讓你的代碼更加清晰,並消除模糊性。 – Alex

+0

我保留了其中一本教科書的原始代碼。 – makaed

回答

0

您的代碼equivilant這樣:

// Program to generate a table of prime numbers 

import <Foundation/Foundation.h> 

int main (int argc, char *argv[]) 
{ 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    int p, d, isPrime; 

    for (p = 2; p <= 50; ++p) { 
     isPrime = 1; 

     for (d = 2; d < p; ++d) { 
      if (p % d == 0) { 
       isPrime = 0; 
      } 
     } 

     if (isPrime != 0) { 
      NSLog (@」%i ", p); 
     } 
    } 

    [pool drain]; 
    return 0; 
} 

和該的if內容for控制語句是在括號中的下一條語句或語句塊。

正如daveoncode所說,你真的應該使用大括號。

+0

謝謝。正如我上面所說的,我只是保留了我正在學習的一本書的原始代碼,這就是爲什麼我感到困惑。現在,我認爲這是有道理的。 但是,我不明白爲什麼當你再次回到這個內部陳述時,d的值又是2? – makaed

4

一個循環不會終止,直到發生以下情況之一:

  1. 一個回報遇到
  2. 例外引發
  3. 遇到休息聲明
  4. 循環的條件評估爲假

ps。使用花括號,否則你的代碼將無法讀取/調試/ mantain

1

不,'if'語句解析爲真將不會打破你的循環。循環繼續執行,這可能是爲什麼你認爲p仍然是2.它仍然是2,因爲你仍然在內部循環。