cin 直接到向量<int>,当没有更多数据时断开循环

cin directly to vector<int>, break loop when no more data

本文关键字:多数据 循环 断开 gt 向量 lt cin int      更新时间:2023-10-16

下面的代码运行并将输入存储在vector中,但会无限循环地侦听输入。目的是从一行输入中取一个字符串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在这里没有用。我已经试过了。

我可以添加一些干净,简短,优雅的内容来解决这个问题吗?

vector<int> intVector( std::istream_iterator<int>( std::cin ), 
                       std::istream_iterator<int>() );

您可以使用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;
}

如果您希望避免错误,例如在整数变量中插入一个字符,您可以这样做:

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
  }
}