循环C ++中没有检查条件

时间:2014-01-19 06:21:02

标签: c++

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而不是永远循环?谢谢!)

5 个答案:

答案 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)

因为您使用了逗号运算符而不是分号