首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cin不暂停输入,尽管使用了cin.clear()和cin.ignore()

Cin不暂停输入,尽管使用了cin.clear()和cin.ignore()
EN

Stack Overflow用户
提问于 2017-10-06 04:10:59
回答 2查看 285关注 0票数 0

此输入将从文件重定向到unix终端中的可执行文件:

代码语言:javascript
复制
10 1 2 3 4 5 6 7 8 9 10
5 10 20 30 40 50

Cin并不等待输入,尽管它似乎处于良好的状态。

代码语言:javascript
复制
int main(void) {
    std::cout << "GOOD: " << std::cin.good() << std::endl
              << "EOF: " << std::cin.eof() << std::endl
              << "FAIL: " << std::cin.fail() << std::endl
              << "BAD: " << std::cin.bad() << "\n\n";
    int s;
    while(std::cin >> s) {
            int * arr = new int[s];
            for(int i = 0; i < s; i++) {
                    std::cin >> arr[i];
                    std::cout << arr[i] << " ";
            }
            std::cout << "\n\n";
            delete[] arr;
    }

    std::cout << "CAN READ: " << (bool)(std::cin >> s) << std::endl
              << "GOOD: "<< std::cin.good() << std::endl
              << "EOF: "<< std::cin.eof() << std::endl
              << "FAIL: "<< std::cin.fail() << std::endl
              << "BAD: "<< std::cin.bad() << "\n\n";

    std::cin.clear();
    std::cin.ignore(INT_MAX);

    std::cout << "GOOD: " << std::cin.good() << std::endl
              << "EOF: " << std::cin.eof() << std::endl
              << "FAIL: " << std::cin.fail() << std::endl
              << "BAD: " << std::cin.bad() << "\n\n";

    std::cin.clear();

    std::cout << "GOOD: " << std::cin.good() << std::endl
              << "EOF: " << std::cin.eof() << std::endl
              << "FAIL: " << std::cin.fail() << std::endl
              << "BAD: " << std::cin.bad() << "\n\n";

    std::cout << "Enter a #:\n";
    std::cin >> s; // unable to provide input (EDIT: from keyboard) here
    std::cout << s << std::endl; 

    std::cout << "Program ends.\n";
    return 0;
}

输出是

代码语言:javascript
复制
GOOD: 1
EOF: 0
FAIL: 0
BAD: 0

1 2 3 4 5 6 7 8 9 10 

10 20 30 40 50

CAN READ: 0
GOOD: 0
EOF: 1
FAIL: 1
BAD: 0

GOOD: 0
EOF: 1
FAIL: 0
BAD: 0

GOOD: 1
EOF: 0
FAIL: 0
BAD: 0

Enter a #:
5
Program ends.

我在这里错过了什么?为什么cin不允许我提供它的输入,即使它的缓冲区是空的并且流处于良好的状态?我怎样才能让cin接受进一步的输入呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-06 05:55:32

认为在将文件重定向到cin之后可以无缝地获取键盘输入(感谢Artemy帮助我认识到情况并非如此)。

对于任何有类似问题的人,都可以使用std::cin.rdbuf()。详细信息:cin可以从接受文件输入切换到运行时键盘输入吗?

票数 0
EN

Stack Overflow用户

发布于 2017-10-06 06:58:32

在输入整数后使用cin.flush();。它将刷新流,您可以再次接受字符串输入。如果你想知道为什么会发生这种情况,你可以读这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46598141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档