【发布时间】:2012-11-01 08:58:47
【问题描述】:
这是我目前的代码。这段代码咳出了 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 个小时试图解决这个问题。叹息。
【问题讨论】:
-
sync()丢弃缓冲区中剩余的任何内容,但不能保证这种行为。 -
谢谢,我去看看。但是,如果我执行 cin.ignore 或 cin.peek,是否有任何保证的方法或防止可怕的暂停的方法?
-
OTOH,通过正确检查您的 I/O 操作的结果,您永远不会到不知道流是否为空的地步。
-
但我不确定如何正确检查是否无法在不意外暂停程序的情况下检查流中剩余的内容。另外,它仍然应该设置 EOF 位,不是吗?这只是没有设置。
-
要从控制台设置 EOF 位,请键入
Ctrl + Z。