Как вывести на консоль в C ++ / Windows - PullRequest
15 голосов
/ 25 февраля 2009

При использовании iostream в C ++ в Linux он отображает вывод программы в терминале, но в Windows он просто сохраняет вывод в файл stdout.txt. Как в Windows сделать вывод в консоли?

Ответы [ 14 ]

1 голос
/ 25 февраля 2009

Я полагаю, вы используете какую-то версию Visual Studio? В windows std::cout << "something"; должен что-то записать в консольное окно, ЕСЛИ ваша программа настроена в настройках проекта как консольная программа.

0 голосов
/ 29 апреля 2018

Есть хорошее решение

if (AllocConsole() == 0)
{
    // Handle error here. Use ::GetLastError() to get the error.
}

// Redirect CRT standard input, output and error handles to the console window.
FILE * pNewStdout = nullptr;
FILE * pNewStderr = nullptr;
FILE * pNewStdin = nullptr;

::freopen_s(&pNewStdout, "CONOUT$", "w", stdout);
::freopen_s(&pNewStderr, "CONOUT$", "w", stderr);
::freopen_s(&pNewStdin, "CONIN$", "r", stdin);

// Clear the error state for all of the C++ standard streams. Attempting to accessing the streams before they refer
// to a valid target causes the stream to enter an error state. Clearing the error state will fix this problem,
// which seems to occur in newer version of Visual Studio even when the console has not been read from or written
// to yet.
std::cout.clear();
std::cerr.clear();
std::cin.clear();

std::wcout.clear();
std::wcerr.clear();
std::wcin.clear();
0 голосов
/ 05 августа 2013

Вам не обязательно вносить какие-либо изменения в ваш код (или изменять тип SUBSYSTEM). При желании вы также можете просто pipe stdout и stderr в консольное приложение (версия Windows cat работает хорошо).

0 голосов
/ 17 июня 2012

Если используется MinGW , добавьте параметр, -Wl,subsystem,console или -mconsole.

...