缺少循环会导致代码无用吗?

时间:2012-02-25 14:48:40

标签: c++

首先,这不是功课。我正在使用我为自己买的一本书来学习家里的C ++的开头,它包含了一个我坚持的练习。它问我下面的代码有什么问题,但我似乎无法找到它。首先我认为这与事实上没有一段时间或for循环,因此它不能重复自己使'i'无用,但我不确定这是否是真正的问题。< / p>

for (int i = 0; i <= phrase.size(); ++i)
{
    cout << "Character at position " << i << " is: " << phrase[i] << endl;
}

7 个答案:

答案 0 :(得分:1)

i < phrase.size()  // Given that you are starting from 0th index, I assume
                   // that the valid array indexes are 0 to N-1

答案 1 :(得分:1)

条件错误:i <= phrase.size()应为i < phrase.size()。说短语是10个元素的向量。 size()将返回10,但在循环的最后一次迭代中,phrase[10]正在访问不存在的元素。取消引用超出界限是未定义的行为,C ++标准使整个程序格式不正确。

答案 2 :(得分:0)

我怀疑它是&lt; = size()是问题,在最后一个循环中,短语[i]实际上是一个超过数组末尾的一个导致错误的引用,所以应该是:

for (int i = 0; i < phrase.size(); ++i) 
{ 
    cout << "Character at position " << i << " is: " << phrase[i] << endl; 
} 

答案 3 :(得分:0)

问题在于这一行:

for (int i = 0; i <= phrase.size(); ++i)

i的值将等于phrase.size(),当稍后由phrase[i]索引时超出界限,因为C ++中的indixing是从零开始的。 / p>

答案 4 :(得分:0)

这总是一个很好的指导方针,总是包含起始界限并排除最后一个。

所以写:

for (int i = 0; i < phrase.size(); i++)

那样我从0开始,以最后一项结束。

答案 5 :(得分:0)

<= phrase.size()应为< phrase.size()。循环的最后一次迭代将i等于phraze.size(),它超出范围,因为无论你迭代什么,都以索引0开始。

答案 6 :(得分:0)

想象一下,你有10个项目,但计算它们的数字将看起来像0,1 ..,8,9。所以你应该通过“严格减少”运算符来检查它。这个事实第一次令人困惑,但随后你会看到它是如何舒适的。