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

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

Ответы [ 14 ]

16 голосов
/ 26 февраля 2009

Так как вы упомянули stdout.txt, я решил посмотреть, что именно создаст stdout.txt; обычно, даже с приложением Windows, консольный вывод направляется на выделенную консоль или в никуда, если она не выделена.

Итак, если вы используете SDL (единственное, что вызвало stdout.txt), вы должны следовать совету здесь . Либо освободите stdout и stderr с помощью «CON», либо воспользуйтесь другими обходными путями компилятора / компиляции.

В случае, если ссылка снова разорвется, вот что именно упоминалось в libSDL:

Как мне избежать создания stdout.txt и stderr.txt?

«Я полагаю, что в проекте Visual C ++, который поставляется с SDL, есть цель SDL_nostdio>, которую вы можете создать, которая делает то, что вы хотите (TM).»

«Если вы определите« NO_STDIO_REDIRECT »и перекомпилируете SDL, я думаю, что это решит проблему». >> (Ответ любезно предоставлен Биллом Кендриком)

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

Вы можете добавить консоль в не консольное приложение Windows, используя процесс, описанный в Добавление ввода-вывода консоли в графическое приложение Win32 .

На теме gamedev.net есть целая ветка .

7 голосов
/ 21 июня 2013

Для отладки в Visual Studio вы можете распечатать на консоли отладки:

OutputDebugStringW(L"My output string.");
5 голосов
/ 25 февраля 2009

Если у вас неконсольное приложение Windows, вы можете создать консоль с функцией AllocConsole . После создания вы можете писать в него, используя обычные методы std :: cout.

4 голосов
/ 26 февраля 2009

Функция AllocConsole Windows API создаст окно консоли для вашего приложения.

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

Если вы используете Visual Studio, вам нужно изменить свойство проекта : Свойства конфигурации -> Линкер -> Система -> Подсистема .

Это должно быть установлено на: Консоль (/ SUBSYSTEM: CONSOLE)

Также вам следует изменить WinMain на эту подпись:

int main(int argc, char **argv)
{
    //...
    return 0;
}
4 голосов
/ 25 февраля 2009

Во-первых, какой компилятор или среду разработки вы используете? В случае Visual Studio вам необходимо создать проект консольного приложения, чтобы получить вывод консоли.

Во-вторых,

std::cout << "Hello World" << std::endl;

должно работать в любом консольном приложении C ++.

3 голосов
/ 12 ноября 2009

Использование подсистемы: консоли или подсистемы: Windows зависит от того, как вы хотите запустить приложение:

  • Если вы используете subsystem: console, тогда вы получите весь stdout, записанный в терминал. Проблема в том, что если вы запускаете приложение из меню «Пуск» / «Рабочий стол», вы (по умолчанию) получаете консоль, а также окно приложения (которое может выглядеть довольно некрасиво).
  • Если вы используете subystem: windows, вы не получите stdout / stderr, даже если вы запустите приложение из DOS окна, Cygwin или другого терминала.

Если вам нужен средний способ вывода на терминал, если приложение было запущено на терминале, перейдите по ссылке, которую Люк предоставил в своем решении (http://dslweb.nwnexus.com/~ast/dload/guicon.htm)

Для справки, я столкнулся с этой проблемой с приложением, которое я хочу запустить либо в обычном режиме Windows, либо в пакетном режиме (то есть как часть сценария) в зависимости от параметров командной строки. Вся разница между консольными и Windows-приложениями немного странна для Unix!

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

Если вы используете Visual Studio, все должно работать нормально!

Вот пример кода:

#include <iostream>

using namespace std;

int main (int) {
    cout << "This will print to the console!" << endl;
}

Убедитесь, что вы выбрали консольное приложение Win32 при создании нового проекта. Тем не менее вы можете перенаправить вывод вашего проекта в файл, используя консольный переключатель (>>). Это фактически перенаправит консольный канал от стандартного вывода к вашему файлу. (например, myprog.exe >> myfile.txt).

Хотел бы я не ошибиться!

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

Ваше приложение должно быть скомпилировано как консольное приложение Windows.

...