Как открыть окно консоли в Visual C ++?

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

Например, это будет типичное приложение «привет мир»:

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

Какая линия мне не хватает?

Начните проект с Ctrl + F5 вместо F5 .

Теперь консольное окно останется открытым, Press any key to continue . . . Press any key to continue . . . после выхода программы.

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

  1. Откройте свой проект и перейдите в Обозреватель решений. Если вы следуете вместе со мной в 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 )

Стандартный способ – cin.get() перед вашим оператором return.

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

Поместите точку останова на return линии.

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

Другим вариантом является использование

 #include  system("pause"); 

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

Нажмите любую клавишу для продолжения…

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

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

1) Pass /SUBSYSTEM:CONSOLE для компоновщика.EDIT : см. Ниже.

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

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

   Console   

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

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

РЕДАКТИРОВАТЬ:

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

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

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

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

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

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

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

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

cin.get () или системы («ПАУЗА»). Я не слышал, что вы можете использовать return (0);

Я включаю #include и затем добавляю getch(); непосредственно перед return 0; линия. Это то, чему я учился в школе. Описанные выше методы здесь совершенно разные.

Имела та же проблема. Я использую _getch () непосредственно перед оператором return. Оно работает.

У меня такая же проблема; В моем приложении есть несколько точек выхода (), и не было никакого способа узнать, где именно он выходит, тогда я узнал об этом:

 atexit(system("pause")); 

или

 atexit(cin.get()); 

Таким образом, это остановится независимо от того, где мы выходим в программе.

Мои 2 цента:

Выбор 1: Добавить точку останова в конце main()

Выбор 2: добавьте этот код прямо перед return 0; :

 std::cout << "Press ENTER to continue..."; //So the User knows what to do std::cin.ignore(std::numeric_limits::max(), '\n'); 

Вам нужно включить для std::numeric_limits

(Некоторые опции могут быть вызваны разными именами. Я не использую английскую версию)

У меня была та же проблема, когда я создал проекты с опцией «пустой проект», «Создать проект как« приложение Win32-консоль »вместо« пустого проекта ». В появившемся диалоговом окне нажмите «продолжить», после чего вы можете проверить опцию «пустой проект» и нажать «подтвердить». После этого CTRL + F5 откроет консоль, которая не закрывается автоматически.

вы можете просто поместить keep_window_open (); до возвращения здесь один пример

 int main() { cout<<"hello world!\n"; keep_window_open (); return 0; } 

Другой вариант:

 #ifdef _WIN32 #define MAINRET system("pause");return 0 #else #define MAINRET return 0 #endif 

В основном:

 int main(int argc, char* argv[]) { MAINRET; } 

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

 int main() { some code goes here system("pause") return 0; } 

Фактически, реальное решение – это выбор самого шаблона проекта. Вы ДОЛЖНЫ выбрать Консольное приложение Win32 в более старом VS или сначала ввести имя проекта, а затем дважды щелкнуть мастер Windows Desktop и выбрать консольное приложение Win32. Затем выберите пустой проект в этот момент. Затем это позволяет делать то, что действительно требовал первоначальный вопросник, не добавляя лишнюю точку остановки и код удержания. Я тоже прошел через эту проблему. Ответ также находится на сайте MSDN.

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

В Visual Studio откройте страницы свойств проекта -> Отладка .

Для команды введите $(ComSpec)

Для аргументов команды введите /k $(TargetPath) . Добавьте любые аргументы в свое приложение.

Теперь F5 или Ctrl-F5 запускает Windows / System32 / cmd.exe в новом окне и / k гарантирует, что командная строка останется открытой после завершения выполнения.

Недостатком является то, что выполнение не останавливается на контрольных точках.

  • Неблокирующий вход консоли C ++
  • Перенаправить вывод консоли в текстовое поле в отдельной программе
  • Как я могу получить путь приложения в консольном приложении .NET?
  • Перенаправить вывод консоли в строку в java
  • Могу ли я найти ширину консоли с помощью Java?
  • Вывод зеркального отображения консоли в файл
  • Можно ли перехватить вывод консоли?
  • Почему регистратор ARM PC указывает на инструкцию после следующего запуска?
  • C # - redirect на консоль в реальном времени
  • Как увеличить емкость консоли вывода Eclipse?
  • Цветной вывод консоли в продуктах Intellij
  • Interesting Posts
    Давайте будем гением компьютера.