Предотвращение закрытия окна консоли в консольном приложении Visual Studio C / C++
Это наверное embarasing вопрос, без сомнения, ответ будет совершенно очевидной.
Я использовал Visual Studio в течение многих лет, но это первый раз, когда я сделал какую-либо разработку консольного приложения.
когда я запускаю приложение, появляется окно консоли, вывод программы, а затем окно закрывается по мере выхода приложения.
есть ли способ либо сохранить его открытым, пока я не проверил вывод, либо просмотреть результаты после окно закрыто?
16 ответов
Если вы работаете без отладки (Ctrl+F5), то по умолчанию он предлагает вам нажать return, чтобы закрыть окно. Если вы хотите использовать отладчик, вы должны поставить точку останова на последней строке.
Правой Кнопкой Мыши на вашем проекте
Свойства>Свойства Конфигурации> Компоновщик - > Система
выберите консоль (/SUBSYSTEM:CONSOLE) в .
теперь попробуйте...он должен работать
вот способ для C / C++:
#include <stdlib.h>
#ifdef _WIN32
#define WINPAUSE system("pause")
#endif
поместите это в верхней части вашей программы, и если он находится в системе Windows (#ifdef _WIN32
), затем он создаст макрос под названием WINPAUSE
. Когда вы хотите, чтобы ваша программа приостановилась, позвоните WINPAUSE;
и он приостановит программу, используя команду DOS. Для других систем, таких как Unix/Linux, консоль не должна выходить при выходе из программы.
Если вы используете .NET, поместите Console.ReadLine()
до окончания программы.
Он будет ждать <ENTER>
.
(/SUBSYSTEM:CONSOLE) не работал для моего vs2013 (у меня уже был).
"запуск без отладки" не является опцией, так как я не хочу переключаться между отладкой и просмотром вывода.
закончился
int main() {
...
#if _DEBUG
LOG_INFO("end, press key to close");
getchar();
#endif // _DEBUG
return 0;
}
решение используется в qtcreator до 2.6. Теперь, когда qt растет, vs идет другим путем. Как я помню, в vs2008 нам не нужны такие фокусы.
вот решение, которое (1) не требует никаких изменений кода или точек останова и (2) приостанавливает после завершения работы программы так что вы можете видеть все это было напечатано. Он будет приостановлен после F5 или Ctrl+F5. Основным недостатком является то, что на VS2013 Express (как проверено) он не загружает символы, поэтому отладка очень ограничена.
-
создать пакетный файл. Я назвал свое
runthenpause.bat
, со следующими содержание:%1 %2 %3 %4 %5 %6 %7 %8 %9 pause
в первой строке будет выполняться любая команда, которую вы предоставляете, и до восьми аргументов. Вторая строка будет... пауза.
откройте свойства проекта | свойства конфигурации | отладка.
- изменить "Аргументы команды" на
$(TargetPath)
(или что-то в "команду"). - изменить "Command" на полный путь к
runthenpause.bat
. - нажмите OK.
теперь, когда вы бежите, runthenpause.bat
запустит ваше приложение, и после того, как ваше приложение завершится, сделает паузу для вас, чтобы увидеть вывод консоли.
я опубликую обновление, если выясню, как загрузить символы. Я пытался!--5--> per этой но без успеха.
вы можете запустить исполняемый файл из командной строки. Таким образом, вы могли видеть все выходные. Или вы можете сделать что-то вроде этого:
int a = 0;
scanf("%d",&a);
return YOUR_MAIN_CODE;
и таким образом окно не будет закрываться, пока вы не введете данные для a
переменной.
просто нажмите CNTRL + F5, чтобы открыть его во внешнем окне командной строки (Visual Studio не имеет контроля над ним).
Если это не работает, добавьте следующее в конец вашего кода:
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
это ждать, пока вы нажмете клавишу, чтобы закрыть окно терминала, как только код достигнет конца.
Если вы хотите сделать это в нескольких местах, поставить выше код в метод (например,private void Pause()
) и вызов Pause()
каждый раз, когда программа достигает возможного конец.
несколько лучшее решение:
atexit([] { system("PAUSE"); });
в начале вашей программы.
плюсы:
- можно использовать std:: exit ()
- может иметь несколько возвратов из main
- вы можете запустить свою программу под отладчиком
- IDE independent (+OS independent, если вы используете
cin.sync(); cin.ignore();
трюк вместоsystem("pause");
)
плюсы:
- изменить код
- не пауза на std:: terminate ()
- все равно произойдет в вашей программе вне сеанса IDE / debugger; вы можете предотвратить это под Windows, используя:
extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
if (IsDebuggerPresent())
atexit([] {system("PAUSE"); });
...
}
Visual Studio 2015 С импорт. Потому что я ненавижу когда примеры кода не дают необходимого импорта.
#include <iostream>;
int main()
{
getchar();
return 0;
}