“继续”如何在此代码中工作?

时间:2013-07-11 06:11:03

标签: c loops continue

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")) {

2 个答案:

答案 0 :(得分:3)

  

continue语句将控制传递给下一次迭代   最近的封闭do,for或while语句,   绕过do,for或while语句中的任何剩余语句   体。

在您的代码中,执行continue;后,会立即检查while循环的条件。

如果满足条件,则控制进入循环内部。第一

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

已执行。

然后,声明

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

已执行。

答案 1 :(得分:2)

不,它不会。 continue跳到循环的开头,我。即首先测试条件(因为while构造在执行之前测试,与do-while不同),所以在continue之后你将立即执行

fgets(eqvline, 1024, eqvfile) != NULL

然后,取决于此表达式的值,

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

或循环体后的第一个语句。