c++ - 从标准输入读取文件后读取用户输入
问题描述
我有一个程序,我从命令行开始,将文件推送到stdin
:
main.exe < file.bin
我从文件中读取了所有内容,如下所示:
freopen(NULL, "rb", stdin); // it's a binary file
long* buffer = new long[16000];
while ( fread(buffer, sizeof(long), 16000, stdin) == 16000);
读取所有数字后,我希望用户通过按任意键确认程序继续,但此时stdin
可能包含EOF
并且程序会跳过用户的确认。
printf("Press any key to continue");
getchar(); // user doesn't get a chance to press anything, program flows right through
如果您想重现它,这是整个程序。但是要重现,您必须在执行之前将文件推送到标准输入。
#include <stdio.h>
int main()
{
freopen(NULL, "rb", stdin);
long* buffer = new long[16000];
while ( fread(buffer, sizeof(long), 16000, stdin) == 16000);
printf("Press any key to continue");
getchar();
delete[] buffer;
return 0;
}
问题是如何使getchar()
调用从用户的键盘中获取一个字符,而不是从已经读取的文件中获取。
该程序以 C++17 运行,但使用了大量 C 风格的代码。如果您知道如何使用 C++ 流来执行此操作,请随时发布。我使用的是 Windows 10,但我也希望看到一些可移植的代码。
解决方案
如果通过 将文件file.bin
用作标准输入main.exe < file.bin
,则不能同时使用标准 C 或 C++ 库将控制台用作标准输入。也许您可以尝试使用 WinAPI https://docs.microsoft.com/en-us/windows/console/readconsoleinput
不幸的是,使用 std::cin 读取二进制数据是不可能的:从 std::cin 读取二进制数据
推荐阅读
- php - Str_replace not replacing completely
- asp.net - 如何使用来自 web api 的 POST 重定向到另一个站点?
- python - 计算文件中的总字数?
- google-apps-script - 谷歌脚本花费太多时间。错误服务超时
- apache - 从 https://example.com 重定向到 https://www.example.com
- c++ - 如何仅使用寄存器在 arduino due (sam3x8e) 上的 c++ 中进行外部中断?
- c# - How to use a static resource of string for the value of DataTrigger bound with a combo box SelectedItem?
- firebase - 显示来自 firebase 的所有用户
- javascript - 我正在尝试将 pdf 文件从节点服务器下载到反应客户端,但是当我打开它时,它显示为空白
- php - 从维基百科一一获取电影部分