c cin.get(),cin.peek()暂停,与stdio相同

C++ cin.get(), cin.peek() pausing, same with stdio

本文关键字:cin stdio 相同 peek get 暂停      更新时间:2023-10-16

这是我当前的代码。此代码咳嗽了CIN.Get()上的错误。我知道这不是很好的代码,它永远不会是,我只是在测试一些CIN。

#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;
}

无论如何。我的问题是cin.get(),cin.peek(),cin.ignore(),getchar()或几乎所有cin或stdio函数,您可以在流动时暂停执行我的程序,而无需设置设置EOF碎片或任何东西。这对我来说很刺激,因为我想检查流中是否有任何东西,所以我可以清除它,因为implore()总是暂停。

我唯一可以使用的方法是" istream :: ReadSome"。我已经将其加载到一个char阵列中,并使用COUT打印了它。它打印了我不认识的一条长符号(其中每个符号都是单个符号)。

http://gyazo.com/e3ee65cdad7ed5cc7b2ce2307ca58c90

铸造到整数,它们以-52的形式出现,它不等于ASCII或Unicode中的任何内容。

我正在使用Visual C Express进行编译2010。

请帮忙,我在这一点上完全有困难。我只想阅读Chars/flush我的流,而不会停下来,如果没有任何东西。我花了3个小时尝试解决这个问题。叹息。

要摆脱已知可用的所有字符,您可以将std::istream::ignore()std::streambuf::in_avail()结合使用:

std::cin.ignore(std::cin.rdbuf()->in_avail());

但是,我想这并不能真正完成您想要的事情:标准流对象只需阅读操作系统递给它们即可。通常,连接到某种控制台窗口的输入的默认模式是buffer buffer the Input。真正将多少个字符交给了流。

要检查输入流上是否有输入,您需要使用特定于平台的方法。标准C 库不提供任何非阻止检查,以查看新数据是否到达std::cin上。在POSIX系统上,您可以将poll()与文件描述符0一起使用,以查看std::cin是否具有任何数据。我不知道的非Posix系统需要什么。