Альтернатива для инструкции continue

#c #continue

#c #продолжить

Вопрос:

Я ищу способ заменить оператор continue в этой функции. В правилах указано, что они не могут быть использованы, но у меня возникают трудности с реализацией замены, которая не приводит к неправильной работе остальной части кода.

 bool neighCheck (int i, int j, int a[][COLLENGTH])
{
   bool neighbourOnFire;
   int x, y, neighX, neighY, curreNeigh;

   /* Bool set up to change after neighbours looped*/
   neighbourOnFire = false;
   /* The neighbours -looping from -1 -> 1 to get index of each neighbour*/
   for (x = -1; x < 2; x  ) {
      for (y = -1; y < 2; y  ) {
         /* Disregards current (middle) cell*/
         if ((x == 0) amp;amp; (y == 0)) {
            continue;
         }
         /* Get indexes of the neighbour we're looking at */
         neighX = i   x;
         neighY = j   y;
         /* Checks for edges*/
         if (neighX >= 0 amp;amp; neighY >= 0 amp;amp; neighX < ROWLENGTH
            amp;amp; neighY < COLLENGTH) {
            /* Get the neighbour using the indexes above */
            curreNeigh = a[neighX][neighY];
            /* Test to see if the neighbour is burning */
            if (curreNeigh == fire) {
               neighbourOnFire = true;
               continue;
            }
         }
      }
   }
   return neighbourOnFire;
}
  

Комментарии:

1. Почему бы и нет if ((x != 0) || (y != 0)) , и еще один блок кода?

2. Второй continue не нужен, потому что это последний оператор.

3. Может быть, использовать goto ? 😉

4. neighbourOnFire = true; return true; в этом случае может быть заменен на.

Ответ №1:

Первый continue; можно заменить, инвертировав условие и поместив код rest внутри if оператора.

Второй continue; можно просто удалить, потому что после этого нет кода для выполнения.

 bool neighCheck (int i, int j, int a[][COLLENGTH])
{
   bool neighbourOnFire;
   int x, y, neighX, neighY, curreNeigh;

   /* Bool set up to change after neighbours looped*/
   neighbourOnFire = false;
   /* The neighbours -looping from -1 -> 1 to get index of each neighbour*/
   for (x = -1; x < 2; x  ) {
      for (y = -1; y < 2; y  ) {
         /* Disregards current (middle) cell*/
         if (!((x == 0) amp;amp; (y == 0))) {
            /* Get indexes of the neighbour we're looking at */
            neighX = i   x;
            neighY = j   y;
            /* Checks for edges*/
            if (neighX >= 0 amp;amp; neighY >= 0 amp;amp; neighX < ROWLENGTH
               amp;amp; neighY < COLLENGTH) {
               /* Get the neighbour using the indexes above */
               curreNeigh = a[neighX][neighY];
               /* Test to see if the neighbour is burning */
               if (curreNeigh == fire) {
                  neighbourOnFire = true;
               }
            }
         }
      }
   }
   return neighbourOnFire;
}