Я начинаю с Visual C ++, и я хотел бы знать, как сохранить окно консоли.
Например, это будет типичное приложение "Hello World":
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
return 0;
}
Какую черту я пропускаю?
visual-c++
console
Рауль Роа
источник
источник
Ответы:
Начните проект с, Ctrl+F5а не просто F5.
Теперь окно консоли будет оставаться открытым с
Press any key to continue . . .
сообщением после выхода из программы.Обратите внимание, что для этого требуется
Console (/SUBSYSTEM:CONSOLE)
опция компоновщика, которую можно включить следующим образом:CTRL-F5 и подсказки подсистемы работают вместе; они не являются отдельными вариантами.
(Предоставлено DJMorreTX от http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6 )
источник
cin.get(),getchar(), system("pause")
или любой другой мусор. Изменение это работает.system("pause");
в конце вашего кода. Это имеет смысл и прекрасно работает.Стандартный способ -
cin.get()
до вашего заявления о возврате.источник
_tmain
. Я бы проголосовал за -1cin.get()
вместо того, чтобы ставить точку останова для F5 или использовать Ctrl F5. Но мне разрешили только одно понижение._tmain
? Это стандартный способ написания приложения для Windows, ориентированного на консольную подсистему. Отклонение от этого стандарта - это то, что было бы плохой практикой. Очевидно, что здесь никто не говорит о переносимом коде; вопрос говорит Visual C ++ и_tmain
является подписью, которая появляется в примере кода. Пришло время отказаться от этой религии. По умолчанию Windows является «нестандартной», и есть очень веские причины для ее соблюдения ._tmain
заключается в том, что это совершенно ненужный нестандарт (международный стандарт C ++ требует простогоmain
), а также потому, что он использует макросхему MicrosoftT
, которая является ненужным усложнением и словоблудием для поддержки Windows 9x. Если вы чувствуете, что отклонение от стандарта является плохой практикой, то вам абсолютно не следует его использоватьtmain
. Нет никаких веских причин для использованияtmain
, кроме троллинга или для профессионалов, для отображения своей полной некомпетентности.Поместите точку останова на
return
линии.Вы запускаете его в отладчике, верно?
источник
Другой вариант заключается в использовании
Хотя это не очень портативный, потому что он будет работать только на Windows, но он будет автоматически печатать
источник
system
объявлен в<stdlib.h>
.Для проектов makefile принятое решение терпит неудачу из-за ошибки в Visual Studio (которая присутствует по крайней мере до версии 2012 - я еще не тестировал 2013). Эта ошибка подробно описана здесь .
Чтобы консоль приостановилась после завершения программы в проекте makefile, выполните следующие действия (это может отличаться для версий, отличных от 2010 - 2012):
1) Перейдите- РЕДАКТИРОВАТЬ : см. Ниже./SUBSYSTEM:CONSOLE
на компоновщик.2) Откройте файл вашего проекта (.vcxproj) в текстовом редакторе.
3) Внутри корневого
<project>
тега вставьте следующее:4) Перезагрузите проект в вашем решении.
5) Запустите программу без отладки (CTRL + F5).
РЕДАКТИРОВАТЬ:
Согласно моему комментарию ниже, установка опции компоновщика на
/SUBSYSTEM:CONSOLE
самом деле не имеет значения для проектов makefile (и не обязательно даже возможна, если вы используете компилятор, отличный от MSVC). Все, что имеет значение, это то, что параметр добавляется в файл .vcxproj, как описано в шаге 3 выше.источник
/SUBSYSTEM:CONSOLE
к компоновщику на самом деле не имеет значения - шаг 3 - это все, что имеет значение. Помните, что мой ответ относится к проектам makefile - в проекте makefile среда IDE не может узнать, что вы передаете компоновщику (возможно, вы даже не используете компилятор, у которого есть/SUBSYSTEM:CONSOLE
опция), и это проект сама, которая отслеживает, является ли она консольной программой. Я отредактирую свой ответ соответственно.Вы можете использовать
cin.get();
илиcin.ignore();
непосредственно перед оператором return, чтобы избежать закрытия окна консоли.источник
просто поставьте точку останова на последней фигурной скобке main.
это работает для меня, нет необходимости работать без отладки. Он также выполняет деструкторы перед достижением точки останова, поэтому вы можете проверить любые сообщения, напечатанные на этих деструкторах, если они у вас есть.
источник
Просто добавьте точку останова к закрывающей скобке вашего
_tmain
метода. Это более простой способ, плюс вам не нужно добавлять код для отладки.источник
Поместите точку останова на конечную скобку
main()
. Он будет отключен даже с несколькимиreturn
утверждениями. Единственным недостатком является то, что вызовexit()
не будет пойман.Если вы не отлаживаете, следуйте советам в ответе Зойдберга и начните свою программу с Ctrl+ F5вместо просто F5.
источник
Мои 2 цента:
Вариант 1: Добавить точку останова в конце
main()
Вариант 2: добавьте этот код прямо перед
return 0;
:Вы должны включить
<iomanip>
дляstd::numeric_limits
источник
просто добавьте system ("pause") в конце кода перед возвратом 0, как это
источник
источник
cin.get()
илиsystem("PAUSE")
. Я не слышал, что вы можете использоватьreturn(0);
источник
Я включаю
#include <conio.h>
и затем добавляюgetch();
прямо передreturn 0;
строкой. Это то, чему я научился в школе. Методы, упомянутые выше здесь, совсем другие, я вижу.источник
Была такая же проблема. Я использую как
_getch()
раз перед возвратом заявления. Оно работает.источник
(Некоторые варианты могут называться разными именами. Я не использую английскую версию)
У меня была такая же проблема, когда я создавал проекты с опцией «пустой проект», создайте проект как «Win32-консольное приложение» вместо «пустой проект». В появившемся диалоговом окне вы нажимаете «продолжить», после чего вы можете проверить опцию «пустой проект» и нажать «Подтвердить». После этого CTRL + F5 откроет консоль, которая не закрывается автоматически.
источник
У меня такая же проблема; В моем приложении есть несколько точек выхода (), и не было никакого способа узнать, где именно оно выходит, тогда я узнал об этом:
или
Таким образом, это остановится независимо от того, где мы выйдем из программы.
источник
atexit
.atexit
принимает указатель на функцию, а не целое числоДругой вариант:
В основном:
источник
Собственно, реальным решением является выбор самого шаблона проекта. Вы ДОЛЖНЫ выбрать консольное приложение Win32 в более старой версии VS или сначала ввести имя проекта, а затем дважды щелкнуть мастер Windows Desktop, а затем выбрать консольное приложение Win32. Затем выберите пустой проект в этой точке. Затем это позволяет получить то, чего действительно хотел исходный вопросник, без добавления дополнительной точки остановки и кода удержания. Я тоже прошел через эту проблему. Ответ также на сайте MSDN.
источник
Вот способ сохранить командное окно открытым независимо от того, как выполнение останавливается без изменения какого-либо кода:
В Visual Studio откройте Страницы свойств проекта -> Отладка .
Для команды введите
$(ComSpec)
Для командных аргументов введите
/k $(TargetPath)
. Добавьте любые аргументы в ваше собственное приложение.Теперь F5 или Ctrl-F5 запускает Windows / System32 / cmd.exe в новом окне, а / k гарантирует, что командная строка остается открытой после завершения выполнения.
Недостатком является то, что выполнение не остановится на контрольных точках.
источник
Как уже отмечали некоторые, решение Zoidbergs не подключает отладчик, чего вы обычно не хотите.
Лучший вариант imo - настроить VS соответствующим образом (начиная с VS 2017 года), выбрав Сервис> Параметры> Отладка> Общие. Там вы снимаете флажок «Автоматически закрывать консоль при прекращении отладки» (в самом низу), что, вероятно, проверено в вашем случае.
источник
Вы можете просто поставить keep_window_open (); перед возвращением вот один пример
источник