2011-02-16 101 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