我对C中的以下代码的for循环有疑问:
main()
{
int i=1;
for(;;)
{
printf("%d",i++);
if(i>10)
break;
}
}
我在一份试卷中看到了这段代码。我认为for循环不会起作用,因为它没有条件。但答案说代码没有错误。这是真的吗?如果是真的,怎么样?
答案 0 :(得分:4)
常规for循环有三个部分:
通常它们是这样写的:
for (initialization; condition; increment) { statements }
但这三个部分都是可选的。在你的情况下,for循环中确实缺少所有部分,但是存在于其他地方:
int i=1
if (i>10) break
i++
上述代码可以等效地写为:
for (int i=1; i <= 10; i++) {
printf("%d", i);
}
因此,for循环所需的所有部分都存在,除非它们不在实际的for
构造中。循环可行,它只是一种非常易读的写入方式。
答案 1 :(得分:2)
for (;;)
循环是一个无限循环,但在这种情况下,循环体采取的操作可确保它不会永远运行。控件的每个组件都是可选的。缺失的条件相当于1
或true
。
循环可以更清楚地写成:
for (int i = 1; i < 11; i++)
printf("%d", i);
我们仍然可以辩论输出是否合理:
12345678910
可以通过以下方式更轻松地制作:
puts("12345678910");
你最后得到一个换行符。但这些都是元问题。如上所述,循环“有效”。它在语法上是正确的。它也会终止。
答案 2 :(得分:2)
这是一个无限循环。当for
中没有条件且我们使用;;
时,for
正文中的语句将无限执行。但是因为在它的正文中有一个break
语句,如果变量i大于10,则执行将被停止。
正如MSDN中所述:
语句
for(;;)
是产生无限循环的习惯方式,只能通过break,goto或return语句退出。
有关进一步的文档,请查看here。
答案 3 :(得分:2)
您没有在for循环中指定任何参数或条件,因此,它将是无限循环。由于存在基于另一个外部变量的中断条件,因此它不会是无限的。
这应该重写为:
for (int i = 1; i <= 10; i++)
printf("%d",i++);
答案 4 :(得分:0)
即使for循环中没有任何条件,也需要在for循环中指定所需的条件。
printf语句有i++
,它继续增加i
的值,然后我们有if语句,它将检查i的值是否小于10.一旦i大于10,它将打破循环。