尝试从C ++学习书中编写一个练习,“编写一个由while循环组成的程序(每次循环)读入两个整数然后打印它们。当终止'|'时退出程序进入。“ 我编码如下:
#include "C:\Users\Erez\Documents\Dev C++ Projects\std_lib_facilities.h"
int main(){
vector<int> v;
int value {0};
int i {1};
while (cin >> value)
{
v.push_back(value);
if (i % 2 == 0) { //using the % modulo to cout couples.
cout << v[i] << '\t' << v[i-1] << "\n"; // cout i + (i-1)
}
++i;
}
}
提供由空格或行分隔的两个值,我收到此错误:
4 五 抛出'Range_error'实例后调用终止 what():范围错误:2
此应用程序已请求Runtime以不寻常的方式终止它。 请联系应用程序的支持团队以获取更多信息。
非常感谢任何帮助:)
答案 0 :(得分:1)
您的声明:
if (i % 2 == 0){
//
}
在true
循环内的第二次迭代中变为while
,语句为:
cout << v[i] << '\t' << v[i-1] << "\n"; // cout i + (i-1)
被执行。这里的罪魁祸首是v[i]
,实际上是v[2]
。到目前为止,您的向量只有两个元素:v[0]
和v[1]
,这意味着您正在尝试读取超出范围的v[2]
。重新考虑while
语句中的逻辑,并将i
计数器初始化为 0 ,而不是 1 。如果你试图打印出偶数向量元素,那么它应该是:
if (v[i] % 2 == 0)
答案 1 :(得分:1)
指向矢量,数组等。从索引0开始
您正在将索引初始化为1并从那里开始递增。
因此,v [i]指的是在你推送的最后一个之后的值。这是尝试访问某些超出界限的行为,这会导致程序崩溃。