Правильное не закрывающиеся консольное окно windows?
Уже достало это ..
Раньше просто писал
cin.get()
cin.get()
достало
system(“pause”)
getch()
тоже костыли !
Что еще есть ?
В идеале, чтобы с клавиатуры писать quit для выхода
Как это решается в серьезных проектах ?
P.S.Visual Studio 2015
- Вопрос задан более трёх лет назад
- 1265 просмотров
Оценить 1 комментарий
- Вконтакте


- Вконтакте
Такая возможность действительно имеется. Делается это в настройках проекта следующим образом:
При запуске проекта без отладки (Ctrl + F5) будет достигнут нужный результат.
- Вконтакте
- Вконтакте
Поставь себе Linux.
- Вконтакте
Ринат Велиахмедов:
Это проблема не языка и не компилятора или среды. Это проблема Windows.
Я понимаю, что ты косишь под грамотного, но вот такие глупости тебя выдают с потрохами. 🙂
Во-первых, если у него возник вопрос про system() в конце, то ему до серьёзных проектов — как до Марса или даже как до альфы Центавра.
Во-вторых, никогда в программе не должна решаться проблема окружения. Делая system() в программе, чтобы она не закрывалась, человек признаёт, что он просто не знает, как правильно подготовить среду — не хватает знаний уверенного пользователя операционной системы.
В-третьих, в лине просто нет такой проблемы, потому что консоль сделана правильно. Там вообще много чего сделано правильно, поэтому для новичка будет полезно начинать именно на правильной учиться, если, конечно, он не хочет стать обычным знатоком всех ошибок Windows.
Вместо того, чтобы сейчас писать очередную программу, он пытается понять, как настроить среду, — это нерационально.
Как остановить автоматическое закрытие консольных приложений C#? [дубликат]
Мои консольные приложения в Visual Studio закрываются автоматически, поэтому я хотел бы использовать что-то вроде C system(«PAUSE») , чтобы «приостановить» приложения в конце его выполнения, как я могу этого добиться?
9 ответов:
Или
ReadLine() ждет . ↩ , ReadKey() ожидает любую клавишу (кроме клавиш-модификаторов).
правка: украл ключевой символ у Дарина.
Вы можете просто скомпилировать (начать отладку) вашу работу с помощью Ctrl + F5 .
Попробуйте. Я всегда это делаю, и консоль показывает мне мои результаты, открытые на ней. Никакого дополнительного кода не требуется.
Попробуйте Ctrl + F5 в Visual Studio для запуска программы, это добавит паузу с «нажмите любую клавишу, чтобы продолжить. — автоматически, без всякой консоли.Функции Readline() или ReadKey ().
Console.ReadLine() ждать, пока пользователь введет или Console.ReadKey дождется любого ключа.
Использование:
Для его закрытия, когда кто-то нажимает любую клавишу, или:
Для того, когда пользователь вводит что-то и нажимает enter.
Ctrl + F5 лучше, потому что вам не нужны дополнительные строки. И вы можете, в конце концов, нажать enter и выйти из режима работы.
Но, когда вы запускаете программу с F5 и ставите точку останова, вы можете отладить свое приложение, и это дает вам другие преимущества.
В качестве альтернативы можно отложить закрытие, используя следующий код:
Обратите внимание, что Sleep использует миллисекунды.
Упомянутые решения изменяют работу вашей программы.
Вы можете, конечно, поместить #if DEBUG и #endif вокруг вызовов консоли, но если вы действительно хотите, чтобы окно закрывалось только на вашей машине разработки под Visual Studio или если VS не работает, только если вы явно настроили его, и вы не хотите раздражать ‘Press any key to exit. ‘ при запуске из командной строки, путь к этому-использовать API System.Diagnostics.Debugger .
Если вы хотите, чтобы это работало только в DEBUG , просто оберните этот код в Метод [Conditional(«DEBUG»)] void BreakConditional() .
Это также работает для отладки программ, которые нуждаются в повышенных привилегиях, или которые должны быть в состоянии повысить себя.
Если вы не хотите, чтобы программа закрывалась, даже если пользователь нажимает любую клавишу;
Предотвращение закрытия окна консоли в приложении консоли Visual Studio C / C ++
Это, вероятно, неудобный вопрос, поскольку, без сомнения, ответ ослепляюще очевиден.
Я использовал Visual Studio в течение многих лет, но это первый раз, когда я занимаюсь разработкой «консольного приложения».
Когда я запускаю свое приложение, появляется окно консоли, появляется вывод программы, а затем окно закрывается при выходе из приложения.
Есть ли способ оставить его открытым до тех пор, пока я не проверю вывод, или просмотреть результаты после закрытия окна?
Monodevelop делает то, что вы ожидаете. — ctrl-alt-delor
Согласовано. Я думаю, что лучший ответ для VS 2017 и новее — от chronoxor. — All the Rage
21 ответы
Начиная с Visual Studio 2017 (15.9.4) есть возможность:
Автоматически закрывать консоль при остановке отладки:
Сообщает Visual Studio закрыть консоль в конце сеанса отладки.

Я только что тестировал это в VS2017 и VS2019. Это требует как настройки подсистемы на КОНСОЛЬ, так и выключения этой опции. При наличии одного или другого окно автоматически закрывается. — Кейси
Это по-прежнему закрывает для меня окно, если я запускаю несколько проектов из одного и того же решения. — Серж Рогач
Я считаю, что это правильный ответ для VS 2017 и последующих лет. Жаль, что этого нет в старых версиях. — Последний крик моды
Как изменить подсистему для проекта Makefile? — Андре ван Шубрук
Если вы запускаете без отладки (Ctrl + F5), то по умолчанию вам будет предложено нажать клавишу возврата, чтобы закрыть окно. Если вы хотите использовать отладчик, вы должны поставить точку останова на последней строке.
Если у вас есть приложение C ++ и работает без отладки, а окно консоли все еще закрывается, вам нужно не забыть явно установить для подсистемы значение Console в разделе Configuration Properties / Linker / System. Это может произойти, если вы начнете с пустого проекта, в результате чего подсистема останется неустановленной. — Тревор Робинсон
У меня не сработало 🙁 Окно консоли открывается и сразу закрывается, но журнал останавливается и ждет дополнительного нажатия F5 — КодиБагштейн
Правильный ответ — это ответ @TrevorRobinson: Вот расширенная версия, если у вас возникли проблемы с выяснением того, где находятся свойства конфигурации: щелкните правой кнопкой мыши свой проект в Visual Studio> Свойства> Свойства конфигурации> Компоновщик> Система, измените Подсистему на » Приставка» — Debajit
Тревор Робинсон прав. Если запустить пустой проект, а элемент C ++. Вам нужно перейти в View-> Property Manager-> Property (значок гаечного ключа) -> Config. Свойства-> Линкер-> Система-> Подсистема-> во всплывающем меню выберите Консоль. — достопочтенный сэр
Я работаю над сообществом VS 2017. ctrl+f5 не работает, нет Properties когда я щелкаю правой кнопкой мыши по проекту, также wrench icon неактивен. — Ketan
Щелкните правой кнопкой мыши свой проект
Свойства> Свойства конфигурации> Компоновщик> Система
Выберите Консоль (/ ПОДСИСТЕМА: КОНСОЛЬ) in SubSystem вариант или вы можете просто ввести Консоли в текстовом поле!
Теперь попробуйте . он должен работать
Это сработало для моего VS2013 Express, но принятый ответ — нет. Очень странно, поскольку принятый ответ работал для всех версий Visual Studio, которые я использовал в прошлом. — Майкл Кальвин
@MichaelCalvin Вы должны запустить с Ctrl + F5 после установки этого, это кикер. — Джонатан Ми
как заявил @JonathanMee, вы все еще использовали Ctrl + F5. Это уже было установлено в моей визуальной студии 2015, поэтому первый ответ оказался наиболее полезным. — пользователь7468879
Это действительно так. Знакомый CTRL+F5 потерпит неудачу, если вы, скажем, добавите новый файл C ++ в пустой проект. — user2023370
У меня работал над Visual Studio Express 2015. Спасибо. — LHC
Вот способ для C / C ++:
Поместите это в начало вашей программы, и ЕСЛИ это в системе Windows ( #ifdef _WIN32 ), тогда он создаст макрос с именем WINPAUSE . Когда вы хотите, чтобы ваша программа приостановилась, звоните WINPAUSE; и он приостановит программу, используя команду DOS. Для других систем, таких как Unix / Linux, консоль в любом случае не должна завершаться при выходе из программы.
ответ дан 22 окт ’16, 16:10
Этот метод не работает в Visual C ++ (если вы не добавили заголовок?) — wmac
@wmac Вы должны включить заголовок windows.h — Геовил
Я не включил какую-либо библиотеку или пространство имен, но оно работает правильно, большое спасибо. — Халил Ибрагим Оймаджи
Не делай этого, пожалуйста. В pause команда специфична для Windows. — Firegurafiku
У меня работал над Visual Studio 2013 Express. 🙂 — Анирбан
Перейти к меню отладки->Нажмите Начать без отладки
Это даже не вариант в VS 2008, если не была выбрана среда разработки C #. Хотя CTRL + F5 работает. Вы также можете добавить это как кнопку на панель инструментов через Инструменты> Настроить. — грушевый сидр
Если у вас несколько проектов, установите соответствующий в качестве стартового — CAD парень
Если вы используете .NET, поместите Console.ReadLine() до окончания программы.
Он будет ждать <ENTER> .
+1 — Либо так, либо Console.ReadKey() просто ждать любой клавиши. — Фредрик Мёрк
Странно, но в моем приложении это не действует. Он по-прежнему закрывается, не дожидаясь ввода данных пользователем. — Кокодоко
Тогда ваш код, скорее всего, завершится до того, как достигнет этой точки. — В самом деле
Не лучшее решение, если вы запускаете тесты, так как они заставят ваши тесты зависать и никогда не завершаться. — кПаул
Попробуйте позвонить getchar() прямо перед main() возвращается.
ответ дан 04 апр.
Не работает в VS 2008 для простого консольного приложения Hello Name. cout, cin, cout, getchar (), консоль все еще закрывается. В чем дело? — грушевый сидр
Попробуйте поставить getchar () дважды, если у вас есть cout непосредственно перед getchar (). getchar () ожидает символ, и вы уже даете его с помощью cout . Сообщите мне, поможет ли это 🙂 — Магарусу
(/ SUBSYSTEM: CONSOLE) не работал на моем vs2013 (он у меня уже был).
«запускать без отладки» не вариант, так как я не хочу переключаться между отладкой и просмотром вывода.
Решение, используемое в qtcreator до 2.6. Теперь, когда qt растет, vs идет другим путем. Насколько я помню, в vs2008 нам такие ухищрения не понадобились.
ответ дан 13 окт ’15, 15:10
Вот решение, которое (1) не требует каких-либо изменений кода или точек останова и (2) приостанавливает после завершения программы чтобы вы могли видеть многое это было напечатано. Он будет приостановлен после F5 или Ctrl + F5. Основным недостатком является то, что в VS2013 Express (как проверено) он не загружает символы, поэтому отладка очень ограничена.
Создайте командный файл. Я позвонил своему runthenpause.bat со следующим содержанием:
Первая строка будет запускать любую предоставленную вами команду и до восьми аргументов. Вторая строка . пауза.
Откройте свойства проекта | Свойства конфигурации | Отладка.
Теперь, когда ты бежишь, runthenpause.bat запустит ваше приложение и после его завершения остановится, чтобы вы могли увидеть вывод консоли.
Я опубликую обновление, если выясню, как загрузить символы. Я пытался /Z7 для это но безуспешно.
Предотвращение закрытия окна консоли в приложении консоли Visual Studio C / C ++

Как предотвратить закрытие окна консоли в Visual Studio C / C ++
Это, вероятно, неудобный вопрос, поскольку, без сомнения, ответ ослепляюще очевиден.
Я использовал Visual Studio много лет, но это первый раз, когда я занимаюсь разработкой «консольного приложения».
Когда я запускаю свое приложение, появляется окно консоли, появляется вывод программы, а затем окно закрывается при выходе из приложения.
Есть ли способ оставить его открытым, пока я не проверю вывод, или просмотреть результаты после закрытия окна?
- Monodevelop делает то, что вы ожидаете.
- Согласовано. Я думаю, что лучший ответ для VS 2017 и новее — от chronoxor.
Начиная с Visual Studio 2017 (15.9.4) есть возможность:
Соответствующий фрагмент из документации Visual Studio:
Автоматически закрывать консоль при остановке отладки:
Сообщает Visual Studio закрыть консоль в конце сеанса отладки.
- 4 Я только что протестировал это в VS2017 и VS2019. Это требует как настройки подсистемы на КОНСОЛЬ, так и выключения этой опции. При наличии одного или другого окно автоматически закрывается.
- Это по-прежнему закрывает для меня окно, если я запускаю несколько проектов из одного решения.
- Я чувствую, что это правильный ответ для VS 2017 и последующих лет. Жаль, что этого нет в старых версиях.
Если вы запускаете без отладки (Ctrl + F5), то по умолчанию он предлагает вам нажать клавишу возврата, чтобы закрыть окно. Если вы хотите использовать отладчик, вы должны поставить точку останова на последней строке.
- 270 Если у вас есть приложение C ++ и работает без отладки, а окно консоли все еще закрывается, вам нужно не забыть явно установить для подсистемы значение «Консоль» в разделе «Свойства конфигурации / компоновщик / система». Это может произойти, если вы начнете с пустого проекта, в результате чего подсистема останется неустановленной.
- 4 У меня не получилось 🙁 Окно консоли открывается и сразу закрывается, но журнал останавливается и ждет дополнительного нажатия F5
- 40 Правильный ответ — это ответ @TrevorRobinson: Вот расширенная версия, если у вас возникли проблемы с выяснением того, где находятся свойства конфигурации: щелкните правой кнопкой мыши свой проект в Visual Studio> Свойства> Свойства конфигурации> Компоновщик> Система, измените Подсистему на "Приставка"
- 3 Тревор Робинсон прав. Если запустить пустой проект, а C ++ item. Вам нужно перейти в View-> Property Manager-> Property (значок гаечного ключа) -> Config. Свойства-> Линкер-> Система-> Подсистема-> во всплывающем меню выберите Консоль.
- 10 Я работаю над сообществом VS 2017. ctrl+f5 не работает, нет Properties когда я щелкаю проект правой кнопкой мыши, также wrench icon неактивен.
Щелкните правой кнопкой мыши свой проект
Свойства> Свойства конфигурации> Компоновщик> Система
Выбрать Консоль (/ SUBSYSTEM: CONSOLE) в SubSystem вариант или вы можете просто ввести Приставка в текстовом поле!
Теперь попробуйте . он должен работать
- Это сработало для моего VS2013 Express, но принятый ответ — нет. Очень странно, поскольку принятый ответ работал для всех версий Visual Studio, которые я использовал в прошлом.
- 9 @MichaelCalvin Вы должны запустить с Ctrl + F5 после установки этого, это кикер.
- как заявил @JonathanMee, вы все еще использовали Ctrl + F5. Это уже было установлено в моей визуальной студии 2015, поэтому первый ответ оказался наиболее полезным.
- Это действительно так. Знакомый CTRL+F5 не удастся, если вы, скажем, добавите новый файл C ++ в пустой проект.
- У меня работал над Visual Studio Express 2015. Спасибо.
Вот способ для C / C ++:
Поместите это в начало вашей программы, и ЕСЛИ это в системе Windows ( #ifdef _WIN32 ), тогда он создаст макрос с именем WINPAUSE . Когда вы хотите, чтобы ваша программа приостановилась, звоните WINPAUSE; и он приостановит программу, используя команду DOS. Для других систем, таких как Unix / Linux, консоль в любом случае не должна завершаться при выходе из программы.
- Этот метод не работает в Visual C ++ (если вы не добавили заголовок?)
- 2 @wmac Вы должны включить заголовок windows.h
- 1 Я не включил ни одну библиотеку или пространство имен, но оно работает правильно, большое спасибо.
- 1 Не делай этого, пожалуйста. В pause команда специфична для Windows.
- У меня работал над Visual Studio 2013 Express. 🙂
Перейти к меню отладки->Нажмите StartWithoutDebugging
- Это даже не вариант в VS 2008, если не была выбрана среда разработки C #. Хотя CTRL + F5 работает. Вы также можете добавить это как кнопку на панель инструментов через Инструменты> Настроить.
- Если у вас несколько проектов, установите соответствующий как запускаемый.
Если вы используете .NET, поместите Console.ReadLine() до окончания программы.
- 10 +1 — Либо это, либо Console.ReadKey() просто ждать любой клавиши.
- Странно, но в моем приложении это не действует. Он по-прежнему закрывается, не дожидаясь ввода данных пользователем.
- 4 Тогда ваш код, скорее всего, завершится до того, как достигнет этой точки.
- Не лучшее решение, если вы запускаете тесты, так как они заставят ваши тесты зависать и никогда не завершаться.
Попробуйте позвонить getchar() прямо перед main() возвращается.
- Не работает в VS 2008 для простого консольного приложения Hello Name. cout, cin, cout, getchar (), консоль все еще закрывается. В чем дело?
- 1 Попробуйте поместить getchar () дважды, если у вас есть cout непосредственно перед getchar (). getchar () ожидает char, а вы уже даете его cout . Сообщите мне, поможет ли это 🙂
(/ SUBSYSTEM: CONSOLE) не работал для моего vs2013 (у меня он уже был).
"запускать без отладки" не вариант, так как я не хочу переключаться между отладкой и просмотром вывода.
Решение, используемое в qtcreator до 2.6. Теперь, когда qt растет, vs идет другим путем. Насколько я помню, в vs2008 нам такие ухищрения не понадобились.
Вот решение, которое (1) не требует изменений кода или точек останова и (2) приостанавливает работу после завершения программы чтобы вы могли видеть все это было напечатано. Он будет приостановлен после F5 или Ctrl + F5. Основным недостатком является то, что в VS2013 Express (как было проверено) он не загружает символы, поэтому отладка очень ограничена.
Создайте командный файл. Я позвонил своему runthenpause.bat , со следующим содержанием:
Первая строка будет запускать любую предоставленную вами команду и до восьми аргументов. Вторая строка . пауза.
Откройте свойства проекта | Свойства конфигурации | Отладка.
Теперь, когда ты бежишь, runthenpause.bat запустит ваше приложение и после его завершения остановится, чтобы вы могли увидеть вывод консоли.
Я опубликую обновление, если выясню, как загрузить символы. Я старался /Z7 за это, но безуспешно.
- 1 Это все еще не поддерживает отладку, но, по крайней мере, решает проблему отсутствия вывода, например. VLD, в отличие от все другие ответы.
просто введите в качестве последней строки кода:
Вы можете запустить исполняемый файл из командной строки. Таким образом, вы могли видеть весь результат. Или вы можете сделать что-то вроде этого:
и таким образом окно не закроется, пока вы не введете данные для a переменная.
добавить «| пауза »в поле аргументов команды в разделе отладки в свойствах проекта.
- 4 Это было бы отличным решением, если бы оно работало. pause похоже, работает только в пакетных файлах, и хотя он получает ввод от вашей программы на STDIN, он не распечатывает этот текст повторно. Я пробовал заменить | с участием && , но это не повлияло — предположительно, потому что он не выполняется с помощью командной оболочки (cmd.exe).
Просто нажмите CNTRL + F5, чтобы открыть его во внешнем окне командной строки (Visual Studio не контролирует его).
Если это не сработает, добавьте в конец кода следующее:
Это ждет, пока вы нажмете клавишу, чтобы закрыть окно терминала, когда код достигнет конца.
Если вы хотите сделать это в нескольких местах, поместите приведенный выше код в метод (например, private void Pause() ) и звоните Pause() всякий раз, когда программа достигает возможного конца.
- когда я нажимаю cntrl + f5, он открывается, а затем сразу закрывается? как это исправить?
- Второе решение было тем, что я искал!
- Когда я нажимаю Ctrl + F5, ничего не происходит. Раньше у меня это работало, но внезапно перестало работать.
Несколько лучшее решение:
в начале вашей программы.
- можно использовать std :: exit ()
- может иметь несколько возвратов из основного
- вы можете запустить свою программу под отладчиком
- Независимость от IDE (+ независимость от ОС, если вы используете cin.sync(); cin.ignore(); трюк вместо system(‘pause’); )
- нужно изменить код
- не будет останавливаться на std :: terminate ()
- все равно будет происходить в вашей программе вне сеанса IDE / отладчика; вы можете предотвратить это в Windows, используя:
- Очень плохой совет.
- Можете объяснить почему?
- В случае, когда отладка не ведется, она не делает ничего полезного, потому что в этом случае нет проблемы, которую нужно решать. В VS просто запустите программу с помощью Ctrl + F5 и все, так что в VS нет проблем, а в интерпретаторе команд нет проблем, короче говоря, нет проблем. А в случае, когда кто-то отлаживает и хочет, чтобы код остановки остановился, это не более удобное решение, чем точка останова, и вмешивается в ситуации, когда остановка не нужна.
- cin.get();
- system(‘pause’);
Обязательно сделайте любой из них в конце main() функция и до return заявление.
Вы также можете использовать эту опцию
В моем случае я испытал это, когда создал проект Empty C ++ в версии сообщества VS 2017. Вам нужно будет установить для подсистемы значение «Консоль (/ SUBSYSTEM: CONSOLE)» в разделе «Свойства конфигурации».
- Перейдите в «Просмотр», затем выберите «Управление недвижимостью».
- Щелкните правой кнопкой мыши проект / решение и выберите «Свойство». Откроется страница свойств теста
- Перейдите к компоновщику и выберите «Система».
- Щелкните «Подсистема», и появится раскрывающийся список.
- Выберите «Консоль (/ ПОДСИСТЕМА: КОНСОЛЬ)»
- Применить и сохранить
- В следующий раз, когда вы запустите свой код с помощью «CTRL + F5», вы должны увидеть результат.
Использовать Console.ReadLine() в конце программы. Это будет держать окно открытым, пока вы не нажмете кнопку Войти ключ. Подробнее см. Https://docs.microsoft.com/en-us/dotnet/api/system.console.readline.
Visual Studio 2015, с участием импорт. Потому что я ненавижу, когда примеры кода не дают необходимого импорта.
Перейдите в Настройки> Отладка> Снять галочку рядом.

В настоящее время нет возможности сделать это с приложениями, работающими в WSL2. Однако есть два обходных пути:
В окне отладки сохраняется содержимое закрытого окна оболочки WSL.
Окно остается открытым, если ваше приложение возвращает ненулевой код возврата, поэтому, например, вы можете вернуть ненулевой код в отладочных сборках.