【发布时间】:2017-12-03 22:40:09
【问题描述】:
我正在尝试创建一个大小未预定义的vector <int>。只要输入终端中有数字,它就应该输入数字,并且当我点击Enter 时应该停止阅读。我尝试了许多解决方案,包括给定的here 和here。在第二种情况下,我可以输入一个非整数来终止向量的输入。如果我使用第一个解决方案(下面添加的代码),它会无限期地监听输入。
代码:
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <iterator>
using std::cout;
using std::cin;
using std::vector;
using std::string;
using std::istringstream;
int main()
{
//cout << "Enter the elements of the array: \n";
//vector <int> arr ( std::istream_iterator<int>( std::cin ), std::istream_iterator<int>() );
vector <int> arr;
string buf;
cout << "Enter the elements of the array: \n";
while(getline(cin, buf))
{
istringstream ssin(buf);
int input;
while(ssin >> input)
{
arr.push_back(input);
}
}
cout << "The array: \n";
for(size_t i = 0; i < arr.size(); i++)
{
cout << arr[i] << " ";
}
return 0;
}
1) 我不觉得输入一个字符或一个很大的数字来结束收听输入是很优雅的。但是,istringstream 的解决方案似乎是要走的路。我不确定为什么它不起作用。
2) 有没有办法从键盘检测Enter 以终止监听输入?我尝试使用cin.get(),但它改变了向量中的数字。
3) 还有其他方法或建议吗?
【问题讨论】:
-
"有什么方法可以检测到键盘的 Enter"。 getline() 默认情况下采用 Enter 即 '\n' 作为分隔符。所以它读取一行输入并在输入时退出。你做了同样的事情,但在 while()
-
但我在
while()中有getline()。我不确定我是否理解您的意思。 -
将
getline放入while意味着您希望继续获取所有行,直到输入关闭。但在你的问题中,听起来你想在得到一条线后停下来。 -
如果你追求优雅,那你就选错了语言。
标签: c++ vector cin getline istringstream