'if'循环中的'if'语句

时间:2011-09-20 15:05:54

标签: objective-c if-statement for-loop

在下面的Objective-C代码中,当满足第一个内部'if'语句时(true),这是否意味着循环终止并转到下一个语句?

此外,当它在执行一次后返回内部'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;
}

提前致谢。

3 个答案:

答案 0 :(得分:4)

在发生以下任一情况之前,循环不会终止:

  1. 遇到返回
  2. 引发异常
  3. 遇到中断语句
  4. 循环条件评估为false
  5. PS。使用花括号,否则你的代码将无法读取/调试/保护

答案 1 :(得分:1)

不,'if'语句解析为true不会让你脱离循环。循环继续执行,这可能是你认为p仍为2的原因。它仍然是2,因为你仍处于内循环中。

答案 2 :(得分:0)

您的代码与此相同:

// 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; 
} 

iffor控制语句的内容是大括号中的下一个语句或语句块。

正如daveoncode所说,你真的应该使用大括号。