我是CS的新手,并且在网上找到了此代码。两个分号之间的空白表示什么?这个for循环的范围是多少?谢谢。
for (int i = 0, temp; ; i++)
答案 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。否则,循环将退出。
这是一个通过永无休止的循环实现的错误时钟,无法显示i
和temp
在循环进行过程中如何变化。
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