使用for循环索引问题

时间:2016-08-02 15:45:51

标签: c++ loops for-loop do-while

我有一个for循环,我正在使用 slide 运算符,因为我正在使用无符号类型。基本上归结为

for (std::size_t i = 6; i --> 0;){
    cout << i;
}

但它输出的数字从5到0(含),省略6.为什么?

非常感谢您对此的看法。我很困惑。

3 个答案:

答案 0 :(得分:7)

这是

的试金石
  1. 这个所谓的&#34;运营商&#34;如果有的话,应谨慎使用。

  2. for循环的条件检查中更改变量的状态应该非常谨慎,如果有的话。

  3. 最大输出为5只是因为条件测试i递减,因为i也减少了for。在程序控制进入i循环体之前运行条件检查。

    你真的应该重写循环。 不要-->的初始值设置为7,因为这是一个肮脏的黑客行为。虽然while经常与for一起使用(并强调,在您的编程审核中不太可能赢得许多朋友),但我从未见过它与{int v[] = {1,2,3,4,5}; for (auto i : v) { std::cout<<i<<std::endl; } 一起使用1}}循环之前。

答案 1 :(得分:4)

-->不是幻灯片运算符。

编译器将其理解为两个不同的运算符-->

所以你的代码对编译器来说是这样的:

for (std::size_t i = 6; (i--) > 0;){
    cout << i;
}

由于在进入循环之前检查循环条件,在第一次执行循环体之前,体i减少了,因此生成的数字序列为5 4 3 2 1 0。

有关详细信息,请参阅此Stack Overflow问题:What is the "-->" operator in C++?

答案 2 :(得分:1)

在for语句中评估此条件后

5

我将等于5。所以循环的第一次迭代输出

#include <iostream> int main() { size_t i = 6; do { std::cout << i; } while ( i-- > 0 ); return 0; }

要达到效果,您需要按以下方式重写循环

6543210

程序输出

#include <iostream>

int main() 
{
    for ( size_t i = 6; std::cout << i && i != 0; i-- )
    {
        //
    } 

    return 0;
}

另一种方式是以下

const size_t N = 6;

for ( size_t i = N + 1; i-- > 0; )
//              ^^^^^^^    
{
    std::cout << i;
}

当然你可以像这样编写循环

std::numeric_limits<size_t>::max()

但是一般来说,当i的初始值等于#include <iostream> int main() { const size_t N = 6; for ( size_t i = N, j = N; j != 0; j = i-- ) { std::cout << i; } return 0; } 时,这种方法不起作用。因为如果要为此值加1,你将得到0。

使用for循环的一般方法可以采用以下方式

6543210

它的输出是

if