来自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;
}
}
答案 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