char i;
for (i = 1; i < 10, i++;)
{
cout << (i+1) << endl;
}
return 0;
我知道for循环有以下语法:
for(initialization; condition; increment)
{
}
当我运行调试时,为什么它从不检查条件并最终在i = 0停止?
(谢谢Damien和Andars,我不知道为什么“故意”声明被删除了,但你正确地解释了我的问题。有人可以解释为什么编译器在逗号之前跳过条件,以及为什么循环停止在i = 0而不是永远循环?谢谢!)
答案 0 :(得分:2)
我相信他表明他是故意编写代码的。
要回答,i ++总会回归真实。最后一个值是逗号分隔语句的重要值,因此循环不会停止。
编辑以进行详细说明:
它不是简单地使用逻辑,或者忽略逗号之前的内容而只取最后一个值。任何非零的值都被认为是真的,因为我从1开始,然后向上,它将始终为非零(直到它溢出并回绕,这解释了为什么我以0结束)。
如果你说:
x = 4, 5, 6;
x将等于6,即最后一个值。
答案 1 :(得分:1)
更改
for (i = 1; i < 10, i++;)
到
for (i = 1; i < 10; i++)
答案 2 :(得分:1)
更改为
for (i = 1; i < 10; i++) //Notice correct placement of ;
答案 3 :(得分:1)
在我看来,代码也是故意写错的。正如其他人所提到的,逗号运算符将丢弃i<10
的值,只有i++
将被评估为条件。这将返回true,直到i
溢出(值仅从-127到127)并最终在-1
,此时i++
将返回0并且循环退出。因此,i的最终值将为0.
答案 4 :(得分:0)
因为您使用了逗号运算符而不是分号