VS Code中SFML项目cout语句无法输出到终端求助
SFML项目中cout无法输出到VS Code终端的解决方法
问题出在你编译命令里的-mwindows参数——这个参数会让程序以窗口应用程序模式启动,系统不会为它分配控制台窗口,所以cout的输出没有对应的终端可以显示,哪怕你在VS Code终端里运行程序也看不到内容。
给你两种解决思路:
一、临时调试:去掉窗口模式参数
修改链接阶段的编译命令,删掉-mwindows,重新编译运行:
g++ -LC:/SFML/lib Test.out -o app.exe -lmingw32 -lsfml-graphics -lsfml-window -lsfml-system -lsfml-main
这样程序会以控制台应用模式运行,VS Code终端就能正常显示cout的输出,同时SFML窗口也能正常打开。
二、保留窗口模式同时查看输出
如果不想去掉窗口模式,又要看到输出,可以选下面两种方式:
- 输出重定向到文件:运行程序时加上重定向命令,把输出写入文件:
程序运行后,打开./app.exe > output.txtoutput.txt就能看到cout的内容。 - 手动创建控制台窗口:在代码里添加Windows API调用,强制生成控制台,让
cout输出到这个窗口:
修改你的Test.cpp,添加头文件和控制台创建代码:
这样即使编译时保留#include <SFML/Graphics.hpp> #include <iostream> #include <windows.h> // 新增头文件 using namespace std; int main() { // 创建控制台并绑定cout AllocConsole(); freopen("CONOUT$", "w", stdout); sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!"); cout << "This Is A Test" << std::endl; sf::CircleShape shape(100.f); shape.setFillColor(sf::Color::Green); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } window.clear(); window.draw(shape); window.display(); } return 0; }-mwindows,运行程序时会同时弹出SFML窗口和一个控制台窗口,cout的内容会显示在控制台里。
内容的提问来源于stack exchange,提问作者Julian42_74
相关产品推荐
相关产品推荐

