C程序逻辑实现
我的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;
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
,在这种情况下,您可以在函数末尾将其省略。