这个for循环的范围是多少?

时间:2019-10-07 22:29:41

标签: for-loop

我是CS的新手,并且在网上找到了此代码。两个分号之间的空白表示什么?这个for循环的范围是多少?谢谢。

for (int i = 0, temp; ; i++)

3 个答案:

答案 0 :(得分:2)

这是for循环的典型结构:

for(initialization; condition ; increment/decrement)
{
    statement(s);
}

但您的情况如下:

for(initialization; ; increment)
{
      statement(s);
}

如您所见,condition部分已被删除,这是完全有效的,但这只是意味着循环将无限地运行

通常在这种情况下,如果满足某些条件,则循环块内的某些逻辑将负责脱离循环。

答案 1 :(得分:0)

请参阅for的文档:

  

for语句定义了初始化器,条件和迭代器部分:

for (initializer; condition; iterator)
    body
     

这三个部分都是可选的。

也来自同一来源:

  

如果条件部分不存在,或者布尔表达式的计算结果为true,则执行下一个循环迭代;否则,循环将退出。

(重点是我的)

答案 2 :(得分:0)

如果您查看docs.microsoft.com的参考,则可以看到以下示例。

  

以下示例定义了无限for循环:

for ( ; ; )
{
    // Body of the loop.
}

无穷大来自“ condition 部分”为空。再次来自reference

  

条件部分(如果存在)必须为布尔表达式。该表达式在每次循环迭代之前进行求值。如果条件部分不存在,或者布尔表达式的值为真,则执行下一个循环迭代;否则,返回0。否则,循环将退出。


这是一个通过永无休止的循环实现的错误时钟,无法显示itemp在循环进行过程中如何变化。

public async static Task Main(string[] args)
{
    var start = DateTime.Now;
    for (int i = 0, temp; ; i++)
    {
        // 'i' is a) initalised and b) incremented after each 
        // 'temp' is a) *un*initialised and b) doesn't automatically change
        temp = 666;

        Console.WriteLine($"It's now {DateTime.Now.TimeOfDay} and this is about {i} seconds after {start.TimeOfDay}. 'temp' is {temp}");
        await Task.Delay(TimeSpan.FromSeconds(1));
    }
}

输出:

It's now 09:07:02.9269857 and this is about 0 seconds after 09:07:02.9246017. 'temp' is 666
It's now 09:07:04.0195240 and this is about 1 seconds after 09:07:02.9246017. 'temp' is 666
It's now 09:07:05.0223953 and this is about 2 seconds after 09:07:02.9246017. 'temp' is 666
It's now 09:07:06.0379706 and this is about 3 seconds after 09:07:02.9246017. 'temp' is 666
It's now 09:07:07.0482980 and this is about 4 seconds after 09:07:02.9246017. 'temp' is 666