Предотвращение закрытия окна консоли в приложении консоли Visual Studio C/С++

Это, вероятно, вопрос о запуске, поскольку, несомненно, ответ ослепительно очевиден.

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

Когда я запускаю приложение, появляется окно консоли, появляется выход программы, а затем окно закрывается по мере выхода приложения.

Есть ли способ открыть его, пока я не проверил вывод или не просмотрел результаты после закрытия окна?

Ответ 1

Если вы запускаете без отладки (Ctrl + F5), то по умолчанию он предлагает вам нажать return, чтобы закрыть окно. Если вы хотите использовать отладчик, вы должны поставить точку останова в последней строке.

Ответ 2

Щелкните правой кнопкой мыши на вашем проекте

Свойства> Свойства конфигурации> Линкер> Система

Выберите Console (/SUBSYSTEM: CONSOLE) в опции SubSystem или вы можете просто ввести Console в текстовое поле!

Теперь попробуйте... это должно работать

Ответ 3

Вот способ для C/С++:

#include <stdlib.h>

#ifdef _WIN32
    #define WINPAUSE system("pause")
#endif

Поместите это вверху вашей программы, и ЕСЛИ он находится в системе Windows (#ifdef _WIN32), тогда он создаст макрос с именем WINPAUSE. Всякий раз, когда вы хотите, чтобы ваша программа приостанавливалась, вызовите WINPAUSE;, и она приостанавливает программу, используя команду DOS. Для других систем, таких как Unix/Linux, консоль не должна выходить из выхода программы в любом случае.

Ответ 4

Откройте меню отладки- > Нажмите Начать без использования

Ответ 5

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

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

Ответ 6

попробуйте вызвать getchar() прямо перед возвратом main().

Ответ 7

(/SUBSYSTEM: CONSOLE) не работал для моего vs2013 (у меня его уже было).

"run without debugging" не является параметром, так как я не хочу переключаться между отладкой и просмотром вывода.

Я закончил с

int main() {
  ...
#if _DEBUG
  LOG_INFO("end, press key to close");
  getchar();
#endif // _DEBUG
  return 0;
}

Решение, используемое в qtcreator до 2.6. Теперь, когда qt растет, vs идет другим путем. Насколько я помню, в vs2008 нам не нужны такие трюки.

Ответ 8

Здесь решение, что (1) не требует каких-либо изменений кода или точек останова, и (2) приостанавливается после завершения программы, чтобы вы могли видеть все, что было напечатано. Он остановится после F5 или Ctrl + F5. Основной недостаток заключается в том, что на VS2013 Express (как проверено) он не загружает символы, поэтому отладка очень ограничена.

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

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

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

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

  • Измените "Аргументы команд" на $(TargetPath) (или что-то еще в "Команде" ).
  • Измените "Команда" на полный путь до runthenpause.bat.
  • Нажмите ОК.

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

Я опубликую обновление, если выясню, как загрузить символы. Я пробовал /Z7 за этот, но безуспешно.

Ответ 9

просто введите свою последнюю строку кода:

system("pause");

Ответ 10

Начиная с Visual Studio 2017 (15.9.4) есть опция:

Tools->Options->Debugging->Automatically close the console

Соответствующий фрагмент из документации Visual Studio:

Автоматически закрывать консоль, когда отладка прекращается:

Сообщает Visual Studio закрыть консоль в конце сеанса отладки.

Ответ 11

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

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

return YOUR_MAIN_CODE;

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

Ответ 12

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

Ответ 13

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

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

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

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

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

Ответ 14

Несколько лучшее решение:

atexit([] { system("PAUSE"); });

в начале вашей программы.

Плюсы:

  • может использовать std:: exit()
  • может иметь несколько возвратов из основного
  • вы можете запустить свою программу под отладчиком
  • Независимый IDE (+ независимый от ОС, если вы используете трюк 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"); });
    ...
}

Ответ 15

Либо используйте:

  1. cin.get();

или

  1. system("pause");

Обязательно сделайте любой из них в конце функции main() и перед оператором return.

Ответ 16

В моем случае я испытал это, когда создал проект Empty C++ в версии VS 2017 для сообщества. Вам нужно будет установить для подсистемы значение "Консоль (/SUBSYSTEM: CONSOLE)" в разделе "Свойства конфигурации".

  1. Зайдите в "Просмотр", затем выберите "Менеджер недвижимости"
  2. Щелкните правой кнопкой мыши на проекте/решении и выберите "Свойство". Откроется страница свойств теста.
  3. Перейдите к компоновщику, затем выберите "Система"
  4. Нажмите "Подсистема" и появится выпадающий
  5. Выберите "Консоль (/SUBSYSTEM: CONSOLE)"
  6. Применить и сохранить
  7. В следующий раз, когда вы запустите свой код с помощью "CTRL +F5", вы должны увидеть результат.

Ответ 17

Вы также можете использовать эту опцию

#include <conio.h> 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main() {
   .
   .
   .
   getch(); 

   return 0;
}

Ответ 19

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

#include <iostream>;

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