Реализация логики программы на C - PullRequest
0 голосов
/ 16 февраля 2011

У меня есть условие if в моем коде c. если условие if истинно, мне нужно вызвать системный вызов sleep(1) и снова проверить условие if. Это должно быть сделано в 9 раз максимум. Если в любое время в течение 9 раз условие if не выполняется, я должен вернуться из функции. Если истекает 9 раз, я должен вызвать другую функцию. Чтобы было понятнее, я напишу псевдокод ниже.

function1()
{
  count = 0 
  label : if (condition)
  {
    count++
    sleep(1);
    if(count < = 9)
    goto label;
  }

  if(count > 9)
  {
    return;
  }

  function2(); /* if(condition) failed */
  return;
} /* End of function1() */

Каков наилучший способ реализации вышеуказанной логики. Я не предпочитаю использовать оператор goto.

Ответы [ 3 ]

4 голосов
/ 16 февраля 2011

Вы реализовали цикл for.Это было бы полностью эквивалентно, за исключением того, что счет будет равен 1, даже если первый condition потерпит неудачу:

function1()
{
  for (count = 1; condition && count <= 9; count ++)
  {
    sleep(1);
  }

  if(count > 9)
  {
    return;
  }

  function2(); /* if(condition) failed */
  return;
} /* End of function1() */

В C вы обычно рассчитываете от нуля, но это просто вопрос стиля.

function1()
{
  for (count = 0; condition && count < 9; count ++)
  {
    sleep(1);
  }

  if(count >= 9)
  {
    return;
  }

  function2(); /* if(condition) failed */
  return;
} /* End of function1() */

РЕДАКТИРОВАТЬ

Также считается предпочтительным использовать один возврат, а не несколько, так что

function1()
{
  for (count = 0; condition && count < 9; count ++)
  {
    sleep(1);
  }

  if(count < 9)
  {
    function2(); /* if(condition) succeeded within 9 tries */
  }    
} /* End of function1() */
1 голос
/ 16 февраля 2011

Вы можете изменить это на

for(count = 1; count <= 9; ++count)
{
    if(!condition)
    {
        function2();
        break;
    }
    sleep(1);
}
0 голосов
/ 16 февраля 2011

Чтобы ответ Саймона отвечал моим потребностям, я модифицирую его ответ.Пожалуйста, скажите мне, если есть какие-либо ошибки

function1()
{
   for(count = 1; count <= 9; ++count)
   {
      if(!condition)
      {
          function2();
          break;
      }
      sleep(1);
   }

   return;

} /* End of function1 */
...