【问题标题】:How does “continue" work in this code?这段代码中的“继续”是如何工作的?
【发布时间】:2013-07-11 06:11:03
【问题描述】:
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")) {什么时候会被调用呢?

【问题讨论】:

  • 当 continue 被调用时 主体中的其余语句被忽略,并在循环顶部继续执行,并评估循环的测试(在您的情况下为 fgets)。
  • @Jonathan Leffler 谢谢指正。抱歉我的英语不好。

标签: c loops continue


【解决方案1】:

continue 语句将控制权传递给 它出现的最近的封闭 do、for 或 while 语句, 绕过 do、for 或 while 语句中的任何剩余语句 身体。

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

如果条件满足,控制进入循环内部。首先

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

被执行。

然后,声明

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

被执行。

【讨论】:

    【解决方案2】:

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

    fgets(eqvline, 1024, eqvfile) != NULL
    

    那么,根据这个表达式的值,

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

    或循环体之后的第一条语句。

    【讨论】:

    • 值得注意的是,如果代码是for 循环,那么continue 将继续使用reinitialization 中的reinitialization 代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多