2014-01-19 153 views
0
char i; 

for (i = 1; i < 10, i++;) 
{ 
    cout << (i+1) << endl; 
} 

return 0; 

没有检查条件我明白,for循环的语法如下:在for循环C++

for(initialization; condition; increment) 
{ 

} 

当我运行调试,为什么它从来没有检查条件,并最终停止在I = 0 ? (谢谢达米安和安达尔斯,我不知道为什么“故意”陈述已被删除,但你正确地解释了我的问题。有人可以解释为什么编译器在逗号前跳过条件,为什么循环停在I = 0,而不是无休止的循环下去?谢谢!)

+4

这是逗号运算符。 – chris

+0

就像@chris说的,你需要在十岁之后和我之前做一个分号。 –

+0

正如@chris所示,将10之后的逗号改为分号。您也可以在右括号之前删除分号。最后,你通常会将'i'声明为'int'而不是'char'。 – Turix

回答

2

我相信他表示,他写的代码有目的的方式。

要回答,i ++将始终返回true。最后一个值是用逗号分隔的语句重要的值,因此循环不会停止。

编辑的阐述:

它不是简单地使用逻辑或,它忽略什么是逗号之前,只需要最后一个值。任何非零值都被认为是真实的,因为我从1开始,并且上升,它总是非零(直到它溢出并绕回,这就解释了为什么我以0结束)。

如果你说:

x = 4, 5, 6; 

x是等于6,最后一个值。

+0

这回答我上面的评论。因此,编译器将逗号用作逻辑或? –

+0

不,不是或,它忽略逗号前的内容,只取最后一个值。任何非零值都被认为是真实的,因为我从1开始,并且上升,它总是非零。 –

+0

_goes up,它将永远是非零。我不同意!它也向我展示了Zero! –

0

因为使用逗号操作符,而不是一个分号

1

变化

for (i = 1; i < 10, i++;) 

for (i = 1; i < 10; i++) 
1

更改为

for (i = 1; i < 10; i++) //Notice correct placement of ; 
1

在我看来,代码被错误地写入了目的。正如其他人所提到的,逗号运算符将丢弃i<10的值,并且仅将i++作为条件进行评估。这将返回true,直到i溢出(仅从-127到127的值)并结束于-1,此时i++将返回0并且循环退出。因此,我的最终值将为0.