2013-06-18 118 views
1
if(turn==2) 
{ 
    if(forward) /*then what to do if this if comes true for coming out of outer loop*/ 
     if(columnHead>0) 
      { 
      columnHead--; 
      addr[columnHead] |=1<<(rowHead-1); 
      } 
     else 
      { 
      columnHead =7; 
      addr[columnHead] |=1<<(rowHead-1); 
      } 
    if(rowTail!=(rowHead-1)) 
     { 
     addr[columnHead+columnSize] &=~(1<<rowTail); 
     columnSize++; 
     rowTail++; 
     } 
    else 
     { 
     addr[columnTail] &=~(1<<columnTail); 
     if(columnTail==0)columnTail=8; 
     columnTail--; 
     } 
    back=1; 
} 

我想來外if循環的,如果它滿足條件if(forward)如何擺脫c中的「if」循環?

+13

那裏,如果環是否定的:

變化,如果到outter。 :) –

+1

你知道'switch'嗎? –

+0

我會**重構**你的方法**提取一個函數**(從你可以簡單地'返回')。它會使代碼更加清晰並且調用函數更短(並且意圖更容易理解)。 –

回答

8

您應該創建功能此代碼,並從條件成立的塊返回。

2

標準成語是使用while(true){/*your code here*/ break; }整個街區周圍,使用break陳述酌情將帶你到時結束支撐。只記得包括最後的break或者你的程序會循環。

不管你做什麼,都不要使用goto,因爲他們被認爲編程風格很差。

一些民間,從C日while(true)會發出編譯警告,使用for(;;)來代替。

奇怪的是,在思考這個多一些,你可以使用

do { 
/*your code here, using break for premature exit*/ 
} while (false); 

,並不需要最後break。只有我從未在生產代碼中看到過這一點。

+1

最後一個建議在linux內核中經常使用。在宏單塊中表達也很方便。 (你只需要在這種情況下省略最後的';' – viraptor

+0

@viraptor,但是你仍然會收到編譯警告嗎?我寧願不把它們關閉。 – Bathsheba

+0

警告?不,我不這麼認爲。你會得到什麼樣的警告? (並從哪個編譯器?) – viraptor

1

我想只是把一個else在那裏會做你想做的。此外,請將大括號放在大塊周圍 - 這使else部分明確無誤。筆者的意見後

if(turn==2) 
{ 
    if(forward) { 
     if(columnHead>0) 
      { 
      columnHead--; 
      addr[columnHead] |=1<<(rowHead-1); 
      } 
     else 
      { 
      columnHead =7; 
      addr[columnHead] |=1<<(rowHead-1); 
      } 
    } else { 
     if(rowTail!=(rowHead-1)) 
      { 
      addr[columnHead+columnSize] &=~(1<<rowTail); 
      columnSize++; 
      rowTail++; 
      } 
     else 
      { 
      addr[columnTail] &=~(1<<columnTail); 
      if(columnTail==0)columnTail=8; 
      columnTail--; 
      } 
     back=1; 
    } 

} 

版本:

if(turn==2 && !forward) { 
    if(rowTail!=(rowHead-1)) 
     { 
     addr[columnHead+columnSize] &=~(1<<rowTail); 
     columnSize++; 
     rowTail++; 
     } 
    else 
     { 
     addr[columnTail] &=~(1<<columnTail); 
     if(columnTail==0)columnTail=8; 
     columnTail--; 
     } 
    back=1; 
} 
+0

+1;當我滾過那麼多沒有這樣說的答案時,我開始質疑自己的理智。 – sh1

+0

@viraptor實際上我想要的是隻要「if(forward)」條件變爲true,那麼其餘代碼就不應該執行,我應該從外部if循環中出來。 – shafeeq

+0

你的意思是從'columnHead> 0'檢查轉發嗎?這會導致整個部分無效代碼 - 在這種情況下,您可以直接轉到「if(!forward){此處的第二個塊')並放棄第一個。 – viraptor

0

你可能必須去另一個方向,這意味着: 你不想請檢查是否 if(forward)是真實的,而是你想做if(!forward)

雖然你需要檢查前進是什麼類型。我想這是一個整數,但。

+0

是啊,它應該是0或1,如果它是1,那麼我不想繼續執行代碼的其餘部分。 – shafeeq

0

你可以嘗試給return 0;return something;當你需要走出if的,之前讓你可以希望把整個代碼在c syntax函數喜歡 -

(int)someFunction(int turn, int forward, 
int columnHead, int rowHead, int rowTail, int columnTail)/*have all the arguments with proper types declaration*/{ 
    //your code with return 0; 
    }. 
0

爲什麼要進入「如果」首先。

if(turn==2 && forward) //not sure if your logic required `forward` or `!forward` you were ambiguous 
{ 
    //... 
} 
+1

是啊,這是最好的! – shafeeq