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

Какова наилучшая практика для борьбы с проблемой закрытия консоли?

После компиляции консольных программ окно консоли закрывается сразу после запуска. Какова наилучшая практика для ее открытия? Я искал загрузки google, я привык к кодовым блокам, где вам не нужно беспокоиться об этом, но я хочу немного поработать с Visual Studio и с VS, моя консоль закрывается. Во всем interwebz есть несколько различных способов, чтобы держать его открытым, однако, я читал, что большинство из них - плохое кодирование. Что такое предпочтительный метод?

4b9b3361

Ответ 1

Когда я использую Visual Studio, и мне не нужна отладка, я просто запускаю ее с помощью Ctrl + F5 keystroke – и это предотвращает закрытие консоли.

Ответ 2

Поскольку вы всегда запускаете в отладчике, установите контрольную точку в операторе return из main().

Отладчик - ваш лучший друг, учиться (и учиться на раннем этапе), чтобы использовать его в ваших интересах при каждой возможности.

Ответ 3

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

Кроме того, вы можете сделать небольшой пакетный файл для выполнения своей программы, которая будет иметь:

REM batch file to launch program
yourprogram.exe
PAUSE

а команда PAUSE cmd.exe попросит пользователя нажать любую клавишу.

Ответ 4

cin является грубо неэлегантным, но легким для забывания:

{
  char c;
  std::cin >> c;
}

Это держит окно открытым до тех пор, пока вы не наберете символ /* edit */и не нажмете enter.

std::cin.get() закроет окно с момента ввода символа, который, в зависимости от того, насколько легко вы привыкнете, имеет незначительный больший риск "кричать, мне жаль, что я не закрыл это!". чем двухкнопочное нажатие operator>>(istream &).

Оба отличаются от system("pause") тем, что они возвращают доступным для программы способом значение введенного вами символа, поэтому, если это нечасто происходит, один kludge приводит к другому, вы можете написать оператор switch на основе то, что вы набрали (например), немедленно выйти, записать некоторые значения в журнал, запустить его снова и т.д.

Ответ 5

Я использую system("PAUSE");, который дает вам

Press any key to continue . . .

сообщение.

Ответ 7

Сопротивляйтесь соблазну что-либо делать. Удаленные программы командной строки выходят, когда они закончили работу с сообщением статуса через их код выхода. Это позволяет им создавать сценарии и "хорошие граждане" в автоматизированных средах. Даже в интерактивной среде, зачем заставить пользователя делать дополнительный нажатие клавиши только из-за вашей среды отладки?

Если вы запустите, а не отлаживаете, Visual Studio откроет окна консоли, которые приостанавливаются после выхода вашего приложения, чтобы вы все еще могли просматривать вывод. Я не знаю, почему при отладке поведение отличается, возможно, потому, что у вас есть точки останова, поэтому, если вы хотите видеть вывод на разных этапах, вы можете разместить точки останова после соответствующих выходных операторов или в конце main или включить различные опции "stop on exception throw".

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

Ответ 8

Очень распространенным является просто ввести код для чтения ключа с консоли после закрытия основного кода приложения. Записанное нажатие клавиши просто отбрасывается, но он держит консоль открытой.

Это не очень, обязательно, но я часто делаю это, завернутый в определение отладки, поэтому во время отладки консоль остается открытой. Во время выпуска я обычно не запускаюсь внутри VS, и при запуске из командной строки это уже не проблема.

Ответ 9

Ответы "не делайте этого" в этом потоке могут казаться короткими, но они довольно разумны. Я столкнулся с этим вопросом, потому что я отлаживаю набор gtest, который использовался, чтобы нормально работать, но теперь таинственно падает при запуске. При запуске с консоли появляется диалоговое окно "blah.exe перестает работать"; но при запуске из отладчика консоль мгновенно появляется, исчезает, и программа выходит из состояния 0.

Мне следовало подумать о том, насколько странно это различие в поведении, но вместо этого я подумал: "О, мужик, я должен завести это консольное окно, чтобы я мог видеть, что он говорит". Правильно?

Оказывается, что машина, над которой я работаю (мой коллега), имела "Аргументы команды" для отладчика, установленного в "--gtest_filter = * testMsg *". Я тоже это сразу заметил, но мне никогда не приходило в голову, что все тесты, соответствующие фильтру, были переименованы в недавнем фиксации. Таким образом, при запуске из отладчика gtest не обнаружил никаких тестов для запуска и просто вышел. Еще 90 минут моей жизни я никогда не вернусь. (-_-) Я мог бы отбросить эту девочку-рейндж намного раньше, если бы моя реакция на коленный рефлекс не предполагала, что мне нужно, чтобы консольное окно оставалось открытым, чтобы решить проблему...

Ответ 10

Вызов этой функции, прежде чем вы вернетесь в конце main:

void onEnd()
{
    printf("Press any key to exit...");
    _getch();
}