读入变量,while循环在C ++上以'Range_error'终止

时间:2017-08-03 20:35:29

标签: c++ while-loop

尝试从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以不寻常的方式终止它。 请联系应用程序的支持团队以获取更多信息。

非常感谢任何帮助:)

2 个答案:

答案 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]指的是在你推送的最后一个之后的值。这是尝试访问某些超出界限的行为,这会导致程序崩溃。