2013-07-11 23 views
-5
while (fgets(eqvline, 1024, eqvfile) != NULL) { 

    eqvline[strlen(eqvline)-1] = '\0'; 

    if (!strcmp (eqvline, "$SIGNALMAP")) { 
     start_store_mask = 1; 
     continue; 
    } 

    if (!strcmp (eqvline, "$SIGNALMAPEND")) { 
     _num_mask_pins = i; 
     sim_inform (sim, "[vTPSim] Total of %d pins found in equivalent file.\n", _num_mask_pins); 
     //return; 
     start_store_mask = 0; 
    } 
} 

你能解釋一下這個代碼continue;實際上是如何工作的?當執行continue;,哪裏的代碼跳轉到?同樣比較eqvline讀取新的生產線?然後,當將這種代碼if (!strcmp (eqvline, "$SIGNALMAPEND")) {叫?如何「繼續」工作在這個代碼?

+0

當繼續被調用時正文中其餘的語句被忽略,並且執行循環的頂部並繼續評估循環的測試(在你的情況下是fgets)。 –

+0

@Jonathan Leffler Thx for correction.Sorry我的英語不好。 –

回答

2

不,不會。continue跳轉到循環的開始,即第一個條件將被測試(因爲while結構測試以前執行,不像do-while) ,所以你會在之後立即執行圖10是

fgets(eqvline, 1024, eqvfile) != NULL 

然後根據這個表達式的值,

eqvline[strlen(eqvline)-1] = '\0'; 

或循環體後的第一個語句。

+3

值得注意的是,如果代碼是'for'循環,那麼'continue'會繼續'for(initialization; condition; reinitialization)'中的'reinitialization'代碼? –

+0

@JonathanLeffler啊,當然。只有那樣的條件。 – 2013-07-11 06:39:11

3

continue語句控制傳遞給 最近的封閉的下一次迭代做,for或while語句中它的出現, 繞過在做任何其餘的語句,因爲,或while語句 體。

在你的代碼中,執行continue;之後,立即檢查while循環的條件。

如果條件滿足,控制進入循環內部。第一個

eqvline[strlen(eqvline)-1] = '\0'; 

被執行。

然後,聲明

if (!strcmp (eqvline, "$SIGNALMAP")) 

執行。