用C ++读取多行输入

时间:2015-11-25 19:07:01

标签: c++

我正在尝试从C ++中的命令行读取多行输入并将它们存储到一个数组中。这是我的代码。

std::string line;
    int in;
    std::vector<std::string> v;

    while(std::getline(std::cin, line)){
        if(line == "^D") break;
        v.push_back(line);
    }
    for(auto it = v.begin(); it != v.end(); it++){
        std::cout<<*it<<std::endl;

    }

stdin进入无限循环,我似乎无法弄清楚如何防止这种情况。基本上,目标行为是连续两次输入而没有任何输入应该终止stdin循环并运行程序。

2 个答案:

答案 0 :(得分:5)

我会测试字符串是否为空。如果是这样,打破。像这样:

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int main(){

string line;
vector<string> v;

while(std::getline(cin, line)){
    if (line.empty()){
        break;
    }
    v.push_back(line);
}

vector<string>::iterator it;

for (it = v.begin(); it != v.end(); it++){
    cout << *it << '\n';
}

return 0;
}

答案 1 :(得分:2)

如果你真的希望循环停止两个Enter,你可以将条件改为

if(line == "" && v.size() >= 1 && v.back() == "") break;

哪个应检查当前击键和前一个击键是否为Enter。 v.size() >= 1只是检查v中是否包含任何元素,如果它没有任何其他元素则停止Segfault。

请注意,数组中的最后一个元素将是一个空字符串,如果你想摆脱它,那就写一下

v.pop_back();

在第一个循环之外,它摆脱了最后一个元素。