2011-10-06 141 views
1

我无法理解为什么在此代码段中打印出“Hello”语句不是 。我认为for循环中的条件语句仅在第二次迭代后才开始测试。循环C++的奇怪行为

for (count = 0; count < 0; ++count) 
    { 
    cout<<"Hello!\n";  
    } 
+1

阅读本文档 - HTTP:// WWW .cplusplus.com/doc/tutorial/control/ – adatapost

+3

零很小,但不小于它自己。 – kenny

回答

7

它从来没有进入循环,因为for循环在开始时进行了测试。

您从count = 0开始,但循环条件为count < 0。所以它立即失败并跳过整个循环。

do-while循环是在迭代结束时进行测试的循环。

2

我认为,在后只在第二次迭代

for循环开始变得 测试的条件语句不,它不需要。它已在第一次迭代之前进行检查。

4

for循环:

for (count = 0; count < 0; ++count) 
{ 
    cout<<"Hello!\n";  
} 

被定义为等同于:

{ 
    count = 0; 
    while (count < 0) 
    { 
     { 
      cout<<"Hello!\n"; 
     } 
     ++count; 
    } 
} 

需要提醒的是continue会去++count,而不是count < 0

+0

另外一组括号删除了注意事项 –

+0

@Minging Duck:谢谢(修复)!任何对破碎版本感兴趣的人都可以看看Matthieu M.的回答。 – Mankarse

2

首先测试条件。

一个for

for (<initializer>; <condition>; <increment>) { <body> } 

等同于:

{ 
    <initializer> 
    bool __first = true; 
    while ((__first ? __first = false : (<increment>, true)), <condition>) { 
    <body> 
    } 
} 

唯一的循环结构总是一次迭代是:

do { 
    <body> 
} while (<condition>); 
+1

你是否真的认为那些为'for'循环挣扎的人会被这种条件和逗号操作符的无故使用所帮助? – Mankarse

+0

@Mankarse:不是真的,但我想这会帮助他理解'for'提供的语法糖。用'if'后面加上'do/while'表示它可能会更容易。 –