这是我目前的代码。此代码咳嗽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位或任何东西。这对我来说很烦人,因为我想检查一下流中是否有任何东西,所以我可以清除它,因为ignore()总是暂停。
我可以使用的唯一方法是'istream :: readsome'。我已将其加载到char数组中并使用cout打印它。它会打印一长串我不认识的符号(每个符号都是一个符号)。
http://gyazo.com/e3ee65cdad7ed5cc7b2ce2307ca58c90
转换为整数,这些整数为-52,不等于ASCII或Unicode中的任何内容。
我正在使用Visual C ++ Express 2010进行编译。
请帮助,我在这一点上完全被困住了。我只是想读取字符/刷新我的流,如果没有任何东西则不会暂停。我花了3个小时试图解决这个问题。叹息。
答案 0 :(得分:1)
要摆脱已知可用的所有字符,您可以将std::istream::ignore()
与std::streambuf::in_avail()
结合使用:
std::cin.ignore(std::cin.rdbuf()->in_avail());
但是,我猜这并不是你想做的事情:标准的流对象只是读取操作系统提供的任何内容。通常,连接到某种控制台窗口的输入的默认模式是对输入进行行缓冲。真正传递给流的字符数量是多少未定义的。
要检查输入流上是否有可用输入,您需要使用特定于平台的方法。标准C ++库不提供任何非阻塞检查,以查看新数据是否到达std::cin
。在POSIX系统上,您可以使用poll()
和文件描述符0
来查看std::cin
是否有任何数据。我不知道在非POSIX系统上需要什么。