Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序逻辑实现_C_Logic_Implementation - Fatal编程技术网

C程序逻辑实现

C程序逻辑实现,c,logic,implementation,C,Logic,Implementation,我的c代码中有一个if条件。如果if条件为真,我需要调用sleep(1)系统调用并再次检查if条件。这项工作最多只能进行9次。如果在这9次中的任何时候,如果条件失败,我应该从函数返回。如果9次过期,我应该调用另一个函数。为了更清楚,我将在下面编写伪代码 function1() { count = 0 label : if (condition) { count++ sleep(1); if(count < = 9) goto label;

我的c代码中有一个
if
条件。如果
if
条件为真,我需要调用
sleep(1)
系统调用并再次检查
if
条件。这项工作最多只能进行9次。如果在这9次中的任何时候,
如果
条件失败,我应该从函数返回。如果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() */
function1()
{
计数=0
标签:如果(条件)
{
计数++
睡眠(1);
如果(计数<=9)
后藤标签;
}
如果(计数>9)
{
返回;
}
函数2();/*如果(条件)失败*/
返回;
}/*功能1()结束*/

实现上述逻辑的最佳方式是什么。我不喜欢使用
goto
语句。

您已经实现了for循环。这将是完全等效的,除了计数将是1,即使第一个
条件失败:

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

  if(count > 9)
  {
    return;
  }

  function2(); /* if(condition) failed */
  return;
} /* End of function1() */
function1()
{
对于(计数=1;条件和计数9)
{
返回;
}
函数2();/*如果(条件)失败*/
返回;
}/*功能1()结束*/
在C语言中,虽然通常从零开始计数,但这只是风格的问题

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

  if(count >= 9)
  {
    return;
  }

  function2(); /* if(condition) failed */
  return;
} /* End of function1() */
function1()
{
对于(计数=0;条件和计数<9;计数++)
{
睡眠(1);
}
如果(计数>=9)
{
返回;
}
函数2();/*如果(条件)失败*/
返回;
}/*功能1()结束*/
编辑

人们还认为最好使用单一回报,而不是多个回报

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

  if(count < 9)
  {
    function2(); /* if(condition) succeeded within 9 tries */
  }    
} /* End of function1() */
function1()
{
对于(计数=0;条件和计数<9;计数++)
{
睡眠(1);
}
如果(计数<9)
{
function2();/*如果(条件)在9次尝试内成功*/
}    
}/*功能1()结束*/

您已经实现了for循环。这将是完全等效的,除了计数将是1,即使第一个
条件失败:

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

  if(count > 9)
  {
    return;
  }

  function2(); /* if(condition) failed */
  return;
} /* End of function1() */
function1()
{
对于(计数=1;条件和计数9)
{
返回;
}
函数2();/*如果(条件)失败*/
返回;
}/*功能1()结束*/
在C语言中,虽然通常从零开始计数,但这只是风格的问题

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

  if(count >= 9)
  {
    return;
  }

  function2(); /* if(condition) failed */
  return;
} /* End of function1() */
function1()
{
对于(计数=0;条件和计数<9;计数++)
{
睡眠(1);
}
如果(计数>=9)
{
返回;
}
函数2();/*如果(条件)失败*/
返回;
}/*功能1()结束*/
编辑

人们还认为最好使用单一回报,而不是多个回报

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

  if(count < 9)
  {
    function2(); /* if(condition) succeeded within 9 tries */
  }    
} /* End of function1() */
function1()
{
对于(计数=0;条件和计数<9;计数++)
{
睡眠(1);
}
如果(计数<9)
{
function2();/*如果(条件)在9次尝试内成功*/
}    
}/*功能1()结束*/

您可以将其重新排序到

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

for(count=1;count您可以将其重新排序到

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

(count=1;count为了使Simon的答案符合我的需要,我正在修改他的答案。如果有任何错误,请告诉我

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

   return;

} /* End of function1 */
function1()
{

为了(count=1;count使Simon的答案符合我的需要,我正在修改他的答案。如果有任何错误,请告诉我

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

   return;

} /* End of function1 */
function1()
{

对于(count=1;count到目前为止看起来不错,但除非这是多线程程序的一部分,否则作为变量的条件不会改变。如果是多线程条件,则必须是可变的,并使用原子操作进行测试。这里基本上是互斥锁/自旋锁的一些粗略实现。@datenwolf:非常感谢。上面的一段实现ation不会进入多线程应用程序。他的要点是
条件必须是某种函数,或者至少由某种函数更新,而这种函数在代码中没有说明。目前为止看起来不错,但除非这是多线程程序的一部分,否则作为变量的条件不会改变。如果是多线程条件,则条件必须是volatile并使用原子操作进行测试。这里基本上是互斥锁/自旋锁的一些粗略实现。@DatenWalf:非常感谢。上面的实现不是进入多线程应用程序。他的要点是
条件
必须是某种函数,或者至少由某种类型的函数更新您的代码中没有说明。我们需要在函数1的末尾返回一个
值。我想您可能错过了it@Linux;实际上,由于您没有指定返回类型,默认返回类型为
int
,因此您必须执行
return 0
。但您没有返回任何内容,因此我假设您的返回类型为
void
,在这种情况下,您可以在函数结尾处省略它。我们需要在函数结尾处使用一个
return
,对吧。我想您可能错过了it@Linux;实际上,由于您没有指定返回类型,默认返回类型是
int
,因此您必须执行
返回0
。但是您没有返回任何内容,因此我假设您的返回类型为
void
,在这种情况下,您可以在函数末尾将其省略。