首页 > 解决方案 > std::cin 在读取 EOF 并清除后不再读取

问题描述

我正在从std::cin一个while循环中读取行,该循环在EOF引入时结束。退出循环后,我调用std::cin.clear()将流恢复正常并再次读取,但它没有进入第二个循环。

我检查了eofbit并且它设置为falsefailbit也设置false为 并且设置goodbittruegcout清除后0是。这是我正在运行的代码:

    while (getline(std::cin, person)) {
        // Do stuff until I enter ^D
    }
    std::cin.clear();

    // Adding std::cin >> person here doesn't work either

    while (getline(std::cin, person)) {
        // It never enters this loop
    }

我究竟做错了什么?

标签: c++buffercineofistream

解决方案


std::cin.clear()命令清除 cin 中的 错误标志,以便进一步的 I/O 操作可以正常工作。clear 方法不会将 cin 重置为初始值。std::cin 是一个流,因此您只能读取一次。

在这种情况下,我的建议是将读取的行存储在字符串或字符串数​​组中,或者以您喜欢的方式存储,然后从存储的数据中读取。


推荐阅读