gpt4 book ai didi

c++ - 如何从 Windows 应用程序输出到标准输入?

转载 作者:行者123 更新时间:2023-11-28 04:30:53 25 4
gpt4 key购买 nike

这是我的代码片段:

AttachConsole(-1);
freopen("CONOUT$", "w", stdout);
freopen("CONOUT$", "w", stderr);
freopen("CONIN$", "r", stdin); //this doesn't seem to do anything
int n = 0;
cin >> n;
cout << n + 1;
FreeConsole();
WNDCLASSA MainWindow = { 0 };
MainWindow.hbrBackground = (HBRUSH) COLOR_WINDOW;
MainWindow.hCursor = LoadCursor(NULL, IDC_ARROW);
MainWindow.hInstance = hInst;
//here the window gets created etc.

显然这里的控制台使用是基本的,但对于这个问题应该就可以了。问题是 cinscanf 等函数无法正常工作。 coutcerrclogprintf 工作正常,但输入函数不执行任何操作。如何使 stdin 工作(最好使用 cin)?

最佳答案

您的 /SUBSYSTEM:WINDOWS 程序将在启动时立即与控制台分离,命令处理器 cmd.exe 再次等待用户输入。因此,在您的程序可以尝试任何输入操作之前,stdin 已经在使用中。

其实,

#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>

#include <iostream>

int APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
AttachConsole(-1);

freopen("CONOUT$", "w", stdout);
freopen("CONOUT$", "w", stderr);
freopen("CONIN$", "r", stdin);

std::cout.clear();
std::cin.clear();

std::cout << "Hello!\n";
int i;
std::cin >> i;
std::cout << i << '\n';
std::cin.get();
std::cin.get();
}

使用 start/wait foobar.exe 从命令提示符运行时,按预期工作。 (foobar.exe 必须构建为 x64 才能在 x64 Windows 上以这种方式工作。尝试使用 x86 可执行文件会给出有趣的错误消息。)

参见 How do I write a program that can be run either as a console or a GUI application?进行有关该主题的讨论。

关于c++ - 如何从 Windows 应用程序输出到标准输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52975807/

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