首先,这不是功课。我正在使用我为自己买的一本书来学习家里的C ++的开头,它包含了一个我坚持的练习。它问我下面的代码有什么问题,但我似乎无法找到它。首先我认为这与事实上没有一段时间或for循环,因此它不能重复自己使'i'无用,但我不确定这是否是真正的问题。< / p>
for (int i = 0; i <= phrase.size(); ++i)
{
cout << "Character at position " << i << " is: " << phrase[i] << endl;
}
答案 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。所以你应该通过“严格减少”运算符来检查它。这个事实第一次令人困惑,但随后你会看到它是如何舒适的。