【发布时间】:2020-12-22 07:52:32
【问题描述】:
大家,这是我编写的一个函数,用于读取用户输入,它是一个未知大小的双精度向量,输入必须在按下“输入”时终止:
vector<double> read_array()
{
vector<double> array_in;
double el;
while (!cin.get())
{
cin >> el;
array_in.push_back(el);
}
return array_in;
}
为了说明它考虑以下代码:
void init() // the function that calls the read_array function
{
cout << "Enter array X: " << endl;
vector<double> X = read_array();
int l = X.size();
cout << l << endl;
}
提示时的典型输入是: 1(空格)2(空格)3(空格)4(输入)
当按下回车键时,输入终止,变量 'l' 被初始化但等于 0 但是,当按下回车键时,数组大小为 0。调试它使它看起来好像从来没有像那样进入循环。
如果输入值不是数组,同样的例程也能正常工作。
提前感谢大家!
【问题讨论】:
-
我建议使用GNU readline 从您的用户那里获取您的线路,然后对其进行解析(可能使用
std::istringstream) -
您给出的确切实际输入是什么?您使用的
get重载并不像您想象的那样有效。 -
@Someprogrammerdude,当我点击(输入)输入停止时,我输入“1(空格)2(空格)3(输入)”,该例程适用于非数组类型的数据
-
很难猜出你认为
!cin.get()做了什么,但它绝对不会那样做。 -
实际上,到目前为止,没有人评论
!std:cin.get()实际上 做了什么(我忘了在我原来的答案中提到它;现在已修复):std::cin.get()刚刚得到下一个字符。如果该字符不是'\0'否定,它将是false并且不会进入循环。似乎希望它做类似'\n' != std::cin.peek()的事情,但即使这样也不够,因为可能还有其他空白字符。