程序读取2个整数并在while循环中打印它们给出range_error

时间:2013-06-07 13:37:07

标签: c++

来自Programming: principals and practices第4章演练1:

编写一个由while循环组成的程序(每次都围绕着 loop)读入两个int然后打印它们。 a时退出程序 输入终止'I'

到目前为止,代码一直在崩溃。当我调试时,看起来它在第20行遇到了range_error。我查了一下它说它是因为它试图访问不存在的东西。

|代码也说no conversion from 'const char *' to 'int'我如何将该符号作为int使用,以便它可以终止?我认为这样做(char)x是对的!

如果你有一个解决方案,请保持简单,因为我只是在第4章,我刚刚学习了循环和向量。

#include "std_lib_facilities.h"

using namespace std;

int main()
{
    int x = 0;
    vector<int> tuggo;

    cout << "Enter two ints:" << endl;
    cout << "Enter a | to terminate program instead.";

    while(cin>>x)
    {
        if ((char)x == "|")
            break;
        tuggo.push_back(x);
            if (tuggo.size() == 1)
            {
                cout << tuggo[0] << tuggo[1] << endl;
                keep_window_open();
                break;
            }
            else if (tuggo.size() < 1)
                cout << "Too much data, this crappy program only can handle two integers." << endl;
    }
}

3 个答案:

答案 0 :(得分:5)

当您的矢量大小为1时,您尝试访问2个元素 - 这是您的范围例外。

答案 1 :(得分:2)

您需要习惯基于零的索引。

size()是元素的数量。第一个元素是索引0.因此当size()为1时,您只能访问元素0。

索引1是第二个元素,依此类推。

关于no conversion from 'const char *' to 'int'错误,您应该查找char和字符串文字。 'x'的类型为char(一个简单的数值),而"x"const char*(指向零个或多个以空字符结尾的字符的指针)。只需更改为单引号,您也不需要演员。

答案 2 :(得分:2)

tuggo.size() == 1表示std::vector(tuggo [0])中只有一个元素尝试使用tuggo.size() == 2