缺少循环会使代码无用
Absence of loop is rendering code useless?
首先,这不是家庭作业。我正在用我为自己买的一本书来学习C++在家里开始,其中包含一个我坚持的练习。它问我以下代码有什么问题,但我似乎找不到它。首先,我认为这与没有 while 或 for 循环的事实有关,因此它无法重复自己,使"i"无用,但我不确定这是否是这里真正的问题。
for (int i = 0; i <= phrase.size(); ++i)
{
cout << "Character at position " << i << " is: " << phrase[i] << endl;
}
条件是错误的:i <= phrase.size()
应该是i < phrase.size()
。说短语是 10 个元素的向量。 size()
将返回 10,但在循环的最后一次迭代中,phrase[10]
正在访问一个不存在的元素。越界取消引用是未定义的行为,按照C++标准,这会使整个程序格式不正确。
i < phrase.size() // Given that you are starting from 0th index, I assume
// that the valid array indexes are 0 to N-1
我怀疑是 <= size(( 的问题所在,在最后一个循环中,短语 [i] 实际上是数组末尾的一个,导致错误的引用,所以应该是:
for (int i = 0; i < phrase.size(); ++i)
{
cout << "Character at position " << i << " is: " << phrase[i] << endl;
}
问题出在这一行:
for (int i = 0; i <= phrase.size(); ++i)
i
的值将在一点等于 phrase.size()
时,当稍后由 phrase[i]
索引时是越界的,因为 C++ 中的 indixing 是从零开始的。
始终包含起始边界并排除最后一个边界通常是一个很好的准则。
所以写:
for (int i = 0; i < phrase.size(); i++)
这样我从 0 开始,到最后一项结束。
<= phrase.size()
应该< phrase.size()
。循环的最后一次迭代将具有等于 phraze.size()
的i
,这是越界的,因为无论您迭代什么,都以索引 0
开头。
假设您有 10 个项目,但计算它们的数字将看起来像 0、1、8、9。因此,您应该通过"严格较少"运算符进行检查。 这个事实第一次令人困惑,但随后你会看到它有多舒服。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 直接 X 12 示例代码中看似无用C++行
- 缺少循环会使代码无用
- 是我的编译器将适当的代码优化为无用的崩溃代码
- 代码清理-删除c++中无用的文件,包括,全局变量和函数