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


Меню Отладки Goto ->пресс StartWithoutDebugging


Если вы используете .NET, поместите Console.ReadLine() до окончания программы.

Он будет ждать <ENTER>.


попробуйте позвонить getchar() перед main() возвращает.


(/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 (как проверено) он не загружает символы, поэтому отладка очень ограничена.

  1. создать пакетный файл. Я назвал свое runthenpause.bat, со следующими содержание:

    %1 %2 %3 %4 %5 %6 %7 %8 %9
    pause
    

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

  2. откройте свойства проекта | свойства конфигурации | отладка.

  3. изменить "Аргументы команды" на $(TargetPath) (или что-то в "команду").
  4. изменить "Command" на полный путь к runthenpause.bat.
  5. нажмите OK.

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

я опубликую обновление, если выясню, как загрузить символы. Я пытался!--5--> per этой но без успеха.


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

int a = 0;
scanf("%d",&a);

return YOUR_MAIN_CODE;

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


добавить "/ pause " в поле аргументы команды в разделе отладки в свойствах проекта.


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

Если это не работает, добавьте следующее в конец вашего кода:

Console.WriteLine("Press any key to exit...");
Console.ReadKey();

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

Если вы хотите сделать это в нескольких местах, поставить выше код в метод (например,private void Pause()) и вызов Pause() каждый раз, когда программа достигает возможного конец.


просто поместите в качестве последней строки кода:

system("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"); });
    ...
}

как использовать:

  1. cin.get();

или

  1. system("pause");

убедитесь, что сделать любой из них в конце


Visual Studio 2015 С импорт. Потому что я ненавижу когда примеры кода не дают необходимого импорта.

#include <iostream>;

int main()
{
    getchar();
    return 0;
}

использовать console.readline. Твои записи, но не читая его.