Как мешать консольному приложению на C++ сразу выйти?

В последнее время я пытался узнать о C++ из этого веб-сайта. К сожалению каждый раз, когда я пытаюсь выполнить один из примеров кода, я вижу, что программа, открытая в течение приблизительно половины секунды и затем сразу, закрывается. Существует ли способ мешать программе сразу закрыться так, чтобы я видел плоды своего усилия?

185
задан Peter Mortensen 18 December 2014 в 07:52
поделиться

12 ответов

Edit: Как справедливо указывает Чарльз Бейли в комментарии ниже, это не сработает, если есть символы, буферизованные в stdin , и на самом деле нет хорошего способа обойти это.Если вы работаете с подключенным отладчиком, предложенное Джоном Диблингом решение , вероятно, является самым чистым решением вашей проблемы.

Тем не менее, я оставлю это здесь и, может быть, кому-то это пригодится. Я часто использовал его как своего рода быстрый прием при написании тестов во время разработки.


В конце своей функции main вы можете вызвать std :: getchar ();

Это получит один символ из stdin , таким образом давая вы типа поведения «нажмите любую клавишу, чтобы продолжить» (если вы действительно хотите, чтобы сообщение «нажмите любую клавишу», вам придется распечатать его самостоятельно).

Вам необходимо #include для getchar .

118
ответ дан 23 November 2019 в 05:52
поделиться

Если вы используете Visual Studio и запускаете консольное приложение из среды IDE:

нажатие CTRL-F5 (запуск без отладки) запустит приложение и оставит окно консоли открытым до тех пор, пока вы нажимаете любую клавишу.

135
ответ дан 23 November 2019 в 05:52
поделиться

Добавьте следующие строки перед любой функцией exit () или перед любым return s в main () :

std::cout << "Paused, press ENTER to continue." << std::endl;
cin.ignore(100000, "\n");
2
ответ дан 23 November 2019 в 05:52
поделиться

Я обычно просто устанавливаю точку останова на закрывающую фигурную скобку main () . Когда каким-либо образом будет достигнут конец программы, будет достигнута точка останова, и вы можете нажать ALT-Tab в окно консоли для просмотра вывода.

18
ответ дан 23 November 2019 в 05:52
поделиться

Хорошо, я предполагаю, что вы работаете в Windows и используете Visual Studio ... почему? Ну, потому что, если вы используете какую-то ОС Linux, вы, вероятно, запускаете ее с консоли.

В любом случае, вы можете добавить дерьмо в конец своей программы, как предлагают другие, или просто нажмите CTRL + F5 (запуск без отладки), и Visual Studio оставит консоль после завершения.

Другой вариант, если вы хотите запустить отладочную версию, не добавляя лишнего в код, - это открыть окно консоли (Пуск -> Выполнить -> cmd) и перейти в каталог вывода отладки . Затем просто введите имя исполняемого файла, и он запустит вашу программу отладки в консоли. Затем вы можете использовать прикрепление Visual Studio к процессу или что-то еще, если действительно хотите.

3
ответ дан 23 November 2019 в 05:52
поделиться

Проверьте, есть ли в настройках проекта вашей IDE флажок, позволяющий держать окно открытым после завершения программы. Если нет, используйте std::cin.get(); для чтения символа в конце основной функции. Однако убедитесь, что вы используете только построчный ввод (std::getline) или иначе обрабатываете оставшиеся непрочитанными символы (std::ignore until newline), потому что иначе .get() в конце будет читать только тот мусор, который вы оставили непрочитанным ранее.

0
ответ дан 23 November 2019 в 05:52
поделиться

Если вы запустите свой код из компетентной среды IDE, например Code :: Blocks , среда IDE будет управлять консолью, которую она использует для запустите код, оставив его открытым при закрытии приложения. Вы не хотите добавлять специальный код, чтобы консоль оставалась открытой, потому что это помешает ей правильно работать, когда вы используете ее по-настоящему, вне среды IDE.

4
ответ дан 23 November 2019 в 05:52
поделиться

Решение Джеймса работает для всех платформ.

В качестве альтернативы в Windows вы также можете добавить следующее непосредственно перед возвратом из функции main :

  system("pause");

Это запустит команду pause , которая ждет, пока вы нажимаете клавишу, а также отображается красивое сообщение . Нажмите любую клавишу, чтобы продолжить. . .

102
ответ дан 23 November 2019 в 05:52
поделиться

Почему бы просто не запустить программу из консоли, т.е. запустить программу из cmd.exe, если вы используете Windows. Таким образом, окно останется открытым после завершения программы.

[EDIT]: когда я использую KDevelop4, есть полноценный экземпляр Bash (Linux CLI), работающий на вкладке в нижней части IDE. Именно это я и использую в подобных обстоятельствах.

14
ответ дан 23 November 2019 в 05:52
поделиться

Если вы действительно отлаживаете свое приложение в Visual C ++, нажмите F5 или зеленый треугольник на панели инструментов. Если вы на самом деле не отлаживаете его (у вас не установлены точки останова), нажмите Ctrl + F5 или выберите «Начать без отладки» в меню (обычно это в меню «Отладка», что, я согласен, сбивает с толку). Это будет немного быстрее, и, что более важно для вас, в конце будет пауза, и вам не придется менять код.

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

2
ответ дан 23 November 2019 в 05:52
поделиться

Вы даже можете объявить целое число в начале вашей функции main() (скажем, int a;) и поместить std::cin >> a; непосредственно перед возвращаемым значением. Таким образом, программа будет выполняться до тех пор, пока вы не нажмете клавишу и не введете.

-1
ответ дан 23 November 2019 в 05:52
поделиться

Вы также можете вставить

while(true)
    ;

или

for(;;)
    ;

в конце.

-3
ответ дан 23 November 2019 в 05:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: