【问题标题】:For Loop Without Init,Condition, Increment [duplicate]没有初始化,条件,增量的循环[重复]
【发布时间】:2018-12-15 02:27:09
【问题描述】:

大家好,我偶然发现了一个用 C 语言编写的在线代码,在阅读代码时我看到 for 循环没有 initialization、condition 和 increment。循环看起来像这样。

for (;;)
{
    bool main_flag = false;
    while (main_flag == false)
    {
        displayMainMenu();
        switch (main_input)
        {
        case 1: addCar(head, tail); main_flag = true; break;
        case 2: removeCar(head, tail); main_flag = true; break;
        case 3: display(head, tail); main_flag = true; break;
        case 4: printf("Terminating..."); return 0;
        default: printf("\nINVALID INPUT!\nTRYAGAIN !\n");

        }
    }
}

谁能向我解释一下for 循环是什么样的,它是如何工作的?非常感谢

【问题讨论】:

  • 这里没有魔法,你只需要在循环内有一个 break/return 来获得一个条件

标签: c


【解决方案1】:

这正是它所暗示的:没有停止循环的条件,因此它实际上是一个无限循环。

所以

for(;;) {}

本质上是一样的

while(true) {}

摆脱循环的唯一方法是使用break 或return。

【讨论】:

  • 或exit͏͏͏͏͏͏͏͏͏͏͏͏
  • @Bathsheba -- 或 segfault ;)
  • @DavidBowling:严格来说,这是 UB 的一种表现形式。不确定我们真的能数那个。
  • 嗯,现在你提到的确实有道理......好的,谢谢
  • 而你可能看到for(;;)而不是while(true)的原因是,从某种角度来看,前者比后者更有效,因为前者只是循环,而技术上后者每次迭代都必须检查真值以确定是否继续循环。但实际上,编译器几乎肯定会以完全相同的方式对待它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-04
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
相关资源
最近更新 更多