0

Programming: principals and practices第 4 章练习 1 开始:

编写一个由 while 循环组成的程序,该循环(每次围绕循环)读取两个ints,然后打印它们。输入终止时退出程序'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;
    }
}
4

3 回答 3

5

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

于 2013-06-07T13:39:48.227 回答
2

您需要习惯从零开始的索引。

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

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

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

于 2013-06-07T13:41:06.777 回答
2

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

于 2013-06-07T13:47:24.077 回答