Итак, вы написали консольное приложение, компилятор построил его без ошибок, но после запуска программы окно приложения сразу закрывается, сейчас я расскажу как этого избежать.
Если вы пользуетесь Visual Studio 2008 или более ранней версией, Вам достаточно запускать программу из интерфейса компилятора с помощью нажатия клавиш Ctrl + F5.
Если Вы пользуетесь другим компилятором или хотите использовать Вашу программу вне компилятора, то возможны два способа создание задержки экрана. Первый — Прописать команду system(«pause»); в конце главной функции main, но перед оператором return, например:
Эта системный оператор командной строки Windows, также можно реализовать задержку экрана с помощью оператора getch();, но для этого необходимо подключить библиотеку conio.h, пример ниже:
Вы можете применять любой из вышеприведенных способов, принципиальных отличий у них не наблюдается, все исходники в разделе C/C++ приведены без команды задержки экрана, так как были откомпилированы в среде Visual Studio 2008 и запускались из под ее интерфейса.
У меня есть окно консоли, открытое с помощью AllocConsole (), кроме основного окна Win32. Окно консоли открывается перед основным.
Когда я закрываю главное окно, и программа возвращается из основной функции, консоль остается открытой (как и процесс). На самом деле он застревает где-то в ntdll, как показывает отладчик при приостановке программы из Visual Studio 2012.
Закрытие, нажав на кнопку X, завершает процесс, но закрытие с помощью FreeConsole () этого не делает, процесс остается работать без окон. CloseWindow (GetConsoleWindow ()) не закрывает его, оно минимизирует его (. ). PostMessage (GetConsoleWindow (), WM_QUIT, 0,0) закрывает окно, но процесс все еще продолжает работать (визуально это то же самое, что FreeConsole ().
Изредка программа завершается правильно, но нажатие на кнопку X работает каждый раз.
Как мне сделать то же самое, что и нажатие на кнопку X?
Решение
использование PostMessage(wnd, WM_CLOSE, 0, 0) закрыть окно консоли, но проблема, вероятно, где-то еще в вашей программе, даже если это исправление. Окно консоли должно закрыться / исчезнуть автоматически, когда вы вернетесь из main() или же WinMain() ,
Другие решения
Вам нужно уничтожить консоль внутри WM_DESTROY использование сообщений FreeConsole , Я обычно делаю все это в классе, который оборачивает мою консоль. Таким образом, он может перенаправить ввод / вывод на консоль в конструкторе и сбросить ввод / вывод в деструкторе, а также соответственно распределить / уничтожить консоль.
Однако без использования класса или каких-либо оболочек это можно сделать следующим образом.
Решение, которое я использовал, было установить Linker-> System-> SubSystem на «Windows (/ SUBSYSTEM: WINDOWS)» вместо «Console (/ SUBSYSTEM: CONSOLE)». Это делает консоль даже не появляется, что позволяет избежать мерцания. Второе решение было лучше для меня, и оно сделало первое устаревшим.
33 Alex [2009-12-15 19:10:00]
Мой вопрос супер простой, но я перехожу из С# в С++, и мне было интересно, какая команда держит консольное окно открытым в С++?
Я знаю в С#, самый простой способ:
Или, если вы хотите, чтобы пользователь нажал любую клавишу, его:
Как вы это делаете на С++? Единственная причина, по которой я задаю этот простой вопрос, заключается в том, что я не смог найти хороший и ясный ответ в Интернете.
c++ windows console
11 ответов
51 Решение Cogwheel [2009-12-15 19:13:00]
Как насчет std::cin.get(); ?
Кроме того, если вы используете Visual Studio, вы можете запускать без отладки (по умолчанию CTRL-F5), и он не будет закрывать консоль в конце. Если вы запустите его с помощью отладки, вы всегда можете поставить точку останова в закрывающей скобке main() .
Правильный путь
cin.get() является совместимым с С++ и переносимым. Он будет извлекать следующий символ из стандартного ввода (stdin). Пользователь может нажать «Enter», и ваша программа продолжит выполнение или завершится в нашем случае.
Microsoft принимает
Microsoft имеет статью базы знаний под названием Предотвращение исчезновения окна консоли. В нем описывается, как приостанавливать выполнение только при необходимости, то есть только тогда, когда пользователь породил новое окно консоли, выполнив программу из проводника. Код находится в C, который я воспроизвел здесь:
Я использовал это сам, и это хороший способ сделать это, только под окнами. Обратите внимание, что вы можете достичь этого не программно под окнами, запустив свою программу с помощью этой команды:
Неверный путь
Не используйте для этого следующее:
Это приведет к выполнению команды windows «пауза», создав новый процесс cmd.exe/command.com в вашей программе. Это совершенно ненужно, а также не переносится, поскольку команда pause является специфичной для Windows. К сожалению, я видел это много.
Это не является частью стандартной библиотеки C/С++. Это просто расширение компилятора, и некоторые компиляторы его не поддержат.
8 jfseb [2012-01-03 21:39:00]
Если ваша проблема заключается в сохранении окна консоли в Visual Studio без изменение вашего приложения (c-code) и запускают его с помощью Ctrl + F5 (при выполнении Ctrl + F5), но окно все еще закрывается главный намек — установить параметр компоновщика /SUBSYSTEM: CONSOLE в вашем проекте Visual Studio.
1) Откройте проект и перейдите в Обозреватель решений. Если вы будете сопровождать меня в K & R, ваше «решение» будет «привет» с 1 проектом под ним, а также «привет» выделено жирным шрифтом.
Щелкните правой кнопкой мыши по «привет» (или независимо от имени вашего проекта.)
Выберите «Свойства» в контекстном меню.
Выберите «Свойства конфигурации» > «Компоновщик» > «Система».
Для свойства «Подсистема» в правой панели щелкните раскрывающийся список в правой колонке.
Выберите «Консоль (/SUBSYSTEM: CONSOLE)»
Нажмите «Применить» , дождитесь, пока он закончит выполнение того, что он делает, затем нажмите «ОК». (Если «Применить» выделено серым цветом, выберите другую опцию подсистемы, нажмите «Применить» , затем вернитесь и примените консольную опцию. Мой опыт в том, что ОК сам по себе не будет работать.)
Теперь сделайте Boris CTRL-F5, дождитесь, когда ваша программа будет компилировать и связать, найти консольное окно под всем другим нежелательным файлом на вашем рабочем столе и прочитать ваш выпуск программы, а затем любимый «Нажмите любую клавишу, чтобы продолжить. «.
Опять же, CTRL-F5 и подсказки подсистемы работают вместе; они не являются отдельными опциями.