C++ C++;cin.get(),cin.peek()暂停,与stdio相同

C++ C++;cin.get(),cin.peek()暂停,与stdio相同,c++,get,wait,cin,istream,C++,Get,Wait,Cin,Istream,这是我目前的代码。此代码在cin.get()上抛出错误。我知道这不是好代码,它从来就不应该是,我只是在测试一些东西 #include <string> #include <iostream> #include <stdio.h> using namespace std; int main(){ char c[1000]; cin.setstate(cin.eofbit); cout << cin.good() <&

这是我目前的代码。此代码在cin.get()上抛出错误。我知道这不是好代码,它从来就不应该是,我只是在测试一些东西

#include <string>
#include <iostream>
#include <stdio.h>

using namespace std;

int main(){
    char c[1000];
    cin.setstate(cin.eofbit);
    cout << cin.good() << endl;
    cout << cin.eof() <<endl;
    cout << cin.get() << endl;
    cin.putback('c');
    cout << cin.get() << endl;
    cout << "Do we ever reach this?" << endl;
    while(1){
    };
    return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
字符c[1000];
cin.设置状态(cin.eofbit);

cout要清除已知可用的所有字符,可以将std::istream::ignore()
与std::streambuf::in_avail()结合使用:

但是,我想这并不是你想要的:标准流对象只是读取操作系统交给它们的任何内容。通常,连接到某种控制台窗口的输入的默认模式是对输入进行行缓冲。真正交给流的字符数几乎没有定义


检查输入流是否有可用的输入,需要使用特定于平台的方法。标准C++库不提供任何非阻塞检查,看看新数据是否到达了<代码> STD::CIN < /代码>。使用文件描述符

0
查看
std::cin
是否有任何数据。我不知道非POSIX系统需要什么。

sync()
丢弃缓冲区中剩余的任何内容,但这种行为无法保证。谢谢,我会查看它。但是,如果我执行cin.ignore或cin.peek,是否有任何保证的方法,或防止可怕的暂停的方法?通过正确检查I/O操作的结果,您永远不会到达不知道流是否为emp的地步ty与否。但我不确定如何正确地检查流中是否有剩余的内容而不意外暂停我的程序。此外,它应该仍然设置EOF位,不是吗?这只是没有设置。要从控制台设置EOF位,请键入
Ctrl+Z
。我对此进行了调整。in\u avail始终返回1,reg不管我在cin中输入了多少字符。唯一能清除它的方法是使用sync()。加上ignore决定暂停,叹气。谢谢你的回复,我会继续挖掘一些东西,以便能够将其签入windows@user1819357你找到办法检查窗户了吗?
std::cin.ignore(std::cin.rdbuf()->in_avail());