以下代码运行并将输入存储在向量中,但是无限循环地监听输入。目的是从一行输入中取一串ints
,用空格分隔,并将它们存储在一个向量中。
int main(int argc, char ** argv){
int input;
vector<int> intVector;
while (cin >> input)
intVector.push_back(input);
//print vector contents
copy(intVector.begin(), intVector.end(), ostream_iterator<char>(cout, " ")); cout << "\n";
return 0;
}
我想以某种方式在while循环中添加一个简单的额外条件来检查行的结尾,这样它就不会无限期地继续监听。 cin.oef
在这里没用。我已经尝试了其他几件事。
我可以添加一些干净,简洁,优雅的东西来解决这个问题吗?
答案 0 :(得分:8)
怎么样?
vector<int> intVector( std::istream_iterator<int>( std::cin ),
std::istream_iterator<int>() );
答案 1 :(得分:4)
您可以使用sstream
lib:
#include <vector>
#include <string>
#include <sstream>
#include <iostream>
#include <iterator>
using namespace std;
int main(int argc, char ** argv) {
string buf;
while(getline(cin, buf)) {
istringstream ssin(buf);
vector<int> intVector;
int input;
while(ssin >> input) {
intVector.push_back(input);
}
//print vector contents
cout << intVector.size() << endl;
copy(intVector.begin(), intVector.end(), ostream_iterator<int>(cout, " "));
cout << "\n";
}
return 0;
}
答案 2 :(得分:0)
如果要避免错误,例如将字符插入整数变量,可以执行以下操作:
while (some condition) {
if (!(std::cin >> int_variable)) {
std::cin.clear();
std::cin.ignore(1024, '\n');
} else {
array.push_back(int_variable);
// Anything else or increment the condition variable
}
}