2011-02-16 96 views
0

我在我的c代码中有if条件。如果if条件为真,则需要调用sleep(1)系统调用并再次检查if条件。这必须完成最多9次。如果在9次的任何时候,if条件失败,我应该从函数返回。如果9次到期,我应该调用另一个函数。为了更清楚一点,我会写下面的伪代码。C程序逻辑实现

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声明。

回答

0

为了让西蒙回答迎合我的需要,我正在修改他的答案。请告诉我是否有任何错误

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

    return; 

} /* End of function1 */ 
4

您已经实现了一个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() */ 
+0

我们将需要在function1右端的单个`return`。我想你可能会错过它 – 2011-02-16 12:23:17

+0

@Linux;实际上,由于您没有指定返回类型,所以默认返回类型是`int`,所以您必须执行`return 0`。但是你没有返回任何东西,所以我认为你的返回类型是`void`,在这种情况下,你可能会在函数结束时将其退出。 – falstro 2011-02-16 14:11:07

1

您可以重新排列这

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

睡觉在哪里? – falstro 2011-02-16 10:23:11