Как сохранить окно консоли открытым в Visual C ++? - PullRequest
180 голосов
/ 18 января 2009

Я начинаю с Visual C ++ и хотел бы знать, как сохранить окно консоли.

Например, это будет типичное приложение "hello world":

int _tmain(int argc, _TCHAR* argv[])
{
    cout << "Hello World";
    return 0;
}

Какую черту я пропускаю?

Ответы [ 21 ]

377 голосов
/ 20 июля 2009

Запустите проект с Ctrl + F5 вместо просто F5 .

Окно консоли теперь будет оставаться открытым с сообщением Press any key to continue . . . после выхода из программы.

Обратите внимание, что для этого требуется опция компоновщика Console (/SUBSYSTEM:CONSOLE), которую можно включить следующим образом:

  1. Откройте ваш проект и перейдите в Solution Explorer. Если вы следите за мной в K & R, ваше «Решение» будет «Привет» с 1 проектом под ним, также «Привет» выделено жирным шрифтом.
  2. Щелкните правой кнопкой мыши на «привет» (или как называется ваш проект).
  3. Выберите «Свойства» из контекстного меню.
  4. Выберите «Свойства конфигурации»> «Линкер»> «Система».
  5. Для свойства «Подсистема» в правой панели щелкните раскрывающийся список в правом столбце.
  6. Выберите «Консоль (/ SUBSYSTEM: CONSOLE)»
  7. Нажмите Применить, подождите, пока он закончит делать все, что он делает, затем нажмите ОК. (Если «Применить» выделено серым цветом, выберите другой параметр подсистемы, нажмите «Применить», затем вернитесь и примените параметр консоли. Мой опыт показывает, что само по себе «ОК» не будет работать.)

CTRL-F5 и подсказки подсистемы работают вместе; они не являются отдельными вариантами.

(Предоставлено DJMorreTX от http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6)

40 голосов
/ 18 января 2009

Стандартный способ - cin.get() до вашего заявления о возврате.

int _tmain(int argc, _TCHAR* argv[])
{
    cout << "Hello World";
    cin.get();
    return 0;
}
24 голосов
/ 20 июля 2009

Установить точку останова на линии return.

Вы запускаете его в отладчике, верно?

17 голосов
/ 18 января 2009

Другой вариант - использовать

#include <process.h>
system("pause");

Хотя это не очень переносимо, потому что оно будет работать только на Windows, но автоматически напечатает

Нажмите любую клавишу, чтобы продолжить ...

7 голосов
/ 25 апреля 2014

Для проектов makefile принятое решение не работает из-за ошибки в Visual Studio (которая присутствует по крайней мере до версии 2012 - я еще не тестировал 2013). Эта ошибка подробно здесь .

Чтобы консоль приостановилась после завершения программы в проекте make-файла, выполните следующие действия (это может отличаться для версий, отличных от 2010 - 2012):

1) Передайте /SUBSYSTEM:CONSOLE компоновщику. - РЕДАКТИРОВАТЬ : см. Ниже.

2) Откройте файл вашего проекта (.vcxproj) в текстовом редакторе.

3) Внутри корневого тега <project> введите следующее:

<ItemDefinitionGroup>
  <Link>
    <SubSystem>Console</SubSystem>
  </Link>
</ItemDefinitionGroup>

4) Перезагрузите проект в вашем решении.

5) Запустить программу без отладки (CTRL + F5).

EDIT:

Согласно моему комментарию ниже, установка опции компоновщика /SUBSYSTEM:CONSOLE на самом деле не имеет значения для проектов makefile (и даже не обязательно, если вы используете компилятор, отличный от MSVC). Все, что имеет значение, это то, что параметр добавляется в файл .vcxproj, как описано выше в шаге 3.

4 голосов
/ 18 января 2009

Вы можете использовать cin.get(); или cin.ignore(); непосредственно перед оператором return, чтобы избежать закрытия окна консоли.

4 голосов
/ 07 июня 2015

просто поставьте точку останова на последней фигурной скобке main.

    int main () {
       //...your code...
       return 0;
    } //<- breakpoint here

у меня работает, не нужно запускать без отладки. Он также выполняет деструкторы перед достижением точки останова, поэтому вы можете проверить любые сообщения, напечатанные на этих деструкторах, если они у вас есть.

3 голосов
/ 25 марта 2013

Просто добавьте точку останова к закрывающей скобке вашего метода _tmain. Это более простой способ, плюс вам не нужно добавлять код для отладки.

2 голосов
/ 14 февраля 2018

просто добавьте систему («пауза») в конце кода перед возвратом 0, как это

#include <stdlib.h>

int main()
{
    //some code goes here
    system("pause")
    return 0;
}
2 голосов
/ 31 января 2013

Поместите точку останова на конечную скобку main(). Он будет отключен даже с несколькими операторами return. Единственным недостатком является то, что звонок на exit() не будет перехвачен.

Если вы не отлаживаете, следуйте советам в ответе Зойдберга и запустите вашу программу с Ctrl + F5 вместо просто F5 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...