Предотвращение закрытия окна консоли в консольном приложении 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;
}
