Подтвердить что ты не робот

Как вывести на консоль в С++/Windows

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

4b9b3361

Ответ 1

Поскольку вы упомянули stdout.txt, я google'd его, чтобы посмотреть, что именно создаст stdout.txt; как правило, даже при использовании приложения Windows выход консоли выводится на выделенную консоль или нигде, если он не выделен.

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

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

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

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

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

Ответ 3

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

Ответ 4

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

OutputDebugStringW(L"My output string.");

Ответ 5

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

Во-вторых,

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

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

Ответ 6

Если вы используете Visual Studio, вам необходимо изменить свойство проекта: Свойства конфигурации → Linker → System → SubSystem.

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

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

int main(int argc, char **argv)
{
    //...
    return 0;
}

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

Если вам нужен средний путь для вывода на терминал, если приложение было запущено в терминале, а затем следуйте ссылке, которую предоставил Luke в своем решении (<а2 > )

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

Ответ 10

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

Ответ 11

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

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

#include <iostream>

using namespace std;

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

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

Жаль, что я не ошибаюсь!

Ответ 12

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

Ответ 13

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