gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:30:07 28 4
gpt4 key购买 nike

这是我目前的代码。这段代码吐出了 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”。我已经将它加载到一个字符数组中并使用 cout 打印它。它打印出一长串我不认识的符号(每个符号都是一个单独的符号)。

http://gyazo.com/e3ee65cdad7ed5cc7b2ce2307ca58c90

转换为一个整数,结果为 -52,这不等同于 ASCII 或 Unicode 中的任何内容。

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

请帮忙,我现在完全被难住了。我只是想读取字符/刷新我的流,如果什么都没有就暂停。我花了整整 3 个小时试图解决这个问题。叹息。

最佳答案

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

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

但是,我想这并不能真正满足您的需求:标准流对象只是读取操作系统交给它们的任何内容。通常,连接到某种控制台窗口的输入的默认模式是对输入进行行缓冲。有多少字符真正传递给流几乎是不确定的。

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

关于C++ cin.get(), cin.peek() 暂停,同stdio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13352141/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com