Оператор «If» внутри цикла «for» - PullRequest
1 голос
/ 20 сентября 2011

В следующем коде 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 ]

4 голосов
/ 20 сентября 2011

Цикл не прерывается, пока не произойдет одно из следующих действий:

  1. a возвращено обнаружено
  2. исключение повышено
  3. a break встречается оператор
  4. условие цикла оценивается как ложное

пс. используйте фигурные скобки, иначе ваш код будет невозможно прочитать / отладить / сохранить

1 голос
/ 20 сентября 2011

Нет, оператор if, принимающий значение true, не выведет вас из цикла. Цикл продолжает выполняться, возможно, поэтому вы думаете, что p по-прежнему равно 2. Это по-прежнему 2, потому что вы все еще во внутреннем цикле.

0 голосов
/ 20 сентября 2011

Ваш код соответствует этому:

// 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, вы действительно должны использовать фигурные скобки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...