C открытое консольное окно

C открытое консольное окно

Итак, вы написали консольное приложение, компилятор построил его без ошибок, но после запуска программы окно приложения сразу закрывается, сейчас я расскажу как этого избежать.

Если вы пользуетесь 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 ().

Читайте также:  Error code 0xc000014c что делать windows 10

Изредка программа завершается правильно, но нажатие на кнопку 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() .

Читайте также:  Helly von valentine видео

Правильный путь

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 проектом под ним, а также "привет" выделено жирным шрифтом.

Щелкните правой кнопкой мыши по "привет" (или независимо от имени вашего проекта.)

Читайте также:  1С документооборот push уведомления

Выберите "Свойства" в контекстном меню.

Выберите "Свойства конфигурации" > "Компоновщик" > "Система".

Для свойства "Подсистема" в правой панели щелкните раскрывающийся список в правой колонке.

Выберите "Консоль (/SUBSYSTEM: CONSOLE)"

Нажмите "Применить" , дождитесь, пока он закончит выполнение того, что он делает, затем нажмите "ОК". (Если "Применить" выделено серым цветом, выберите другую опцию подсистемы, нажмите "Применить" , затем вернитесь и примените консольную опцию. Мой опыт в том, что ОК сам по себе не будет работать.)

Теперь сделайте Boris CTRL-F5, дождитесь, когда ваша программа будет компилировать и связать, найти консольное окно под всем другим нежелательным файлом на вашем рабочем столе и прочитать ваш выпуск программы, а затем любимый "Нажмите любую клавишу, чтобы продолжить. ".

Опять же, CTRL-F5 и подсказки подсистемы работают вместе; они не являются отдельными опциями.

Ссылка на основную публикацию
Adblock detector