使用std :: cin连续输入字符串

时间:2013-09-08 18:59:31

标签: c++

我有map我要输入姓氏,然后输入家庭成员的名字。我想在输入名字后点击文件末尾,然后重复这个过程。

以下是我的代码。我正在尝试输入文件的结尾,清除它并转到外部循环。但是,当我输入文件末尾时,它会退出两个循环。我该怎么做才能防止这种情况发生?

另外我知道我可以用不同的方式编写程序,但我想知道如何修复当前的代码。

#include <iostream>
#include <map>
#include <vector>
int main()
{
    std::string last, children;
    std::map<std::string, std::vector<std::string>> family;
    while(std::cin >> last) {
        while(std::cin >> children) {
            family[last].push_back(children);
        }
        std::cin.clear(~std::istream::eofbit);
    }
    for(const auto &l:family) {
        std::cout << l.first << std::endl;
        for(const auto &c:l.second)
            std::cout << c << " ";
        std::cout << std::endl;
    }
    return 0;

1 个答案:

答案 0 :(得分:0)

您以错误的方式使用std::ios::clear()。将其设置为 not eofbit 会导致设置其他失败位。删除传递给clear()的参数或使用相同的std::ios::goodbit来从EOF中恢复cin。

参考:ios::clear