Ответ 1
Если вы запускаете без отладки (Ctrl + F5), то по умолчанию он предлагает вам нажать return, чтобы закрыть окно. Если вы хотите использовать отладчик, вы должны поставить точку останова в последней строке.
Это, вероятно, вопрос о запуске, поскольку, несомненно, ответ ослепительно очевиден.
Я использовал Visual Studio в течение многих лет, но это первый раз, когда я создал любую консольную программу.
Когда я запускаю приложение, появляется окно консоли, появляется выход программы, а затем окно закрывается по мере выхода приложения.
Есть ли способ открыть его, пока я не проверил вывод или не просмотрел результаты после закрытия окна?
Если вы запускаете без отладки (Ctrl + F5), то по умолчанию он предлагает вам нажать return, чтобы закрыть окно. Если вы хотите использовать отладчик, вы должны поставить точку останова в последней строке.
Щелкните правой кнопкой мыши на вашем проекте
Свойства> Свойства конфигурации> Линкер> Система
Выберите Console (/SUBSYSTEM: CONSOLE) в опции SubSystem
или вы можете просто ввести Console в текстовое поле!
Теперь попробуйте... это должно работать
Вот способ для C/С++:
#include <stdlib.h>
#ifdef _WIN32
#define WINPAUSE system("pause")
#endif
Поместите это вверху вашей программы, и ЕСЛИ он находится в системе Windows (#ifdef _WIN32
), тогда он создаст макрос с именем WINPAUSE
. Всякий раз, когда вы хотите, чтобы ваша программа приостанавливалась, вызовите WINPAUSE;
, и она приостанавливает программу, используя команду DOS. Для других систем, таких как Unix/Linux, консоль не должна выходить из выхода программы в любом случае.
Откройте меню отладки- > Нажмите Начать без использования
Если вы используете .NET, поместите Console.ReadLine()
до конца программы.
Он будет ждать <ENTER>
.
попробуйте вызвать getchar()
прямо перед возвратом main()
.
(/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 нам не нужны такие трюки.
Здесь решение, что (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
за этот, но безуспешно.
просто введите свою последнюю строку кода:
system("pause");
Начиная с Visual Studio 2017 (15.9.4) есть опция:
Tools->Options->Debugging->Automatically close the console
Соответствующий фрагмент из документации Visual Studio:
Автоматически закрывать консоль, когда отладка прекращается:
Сообщает Visual Studio закрыть консоль в конце сеанса отладки.
Вы можете запустить исполняемый файл из командной строки. Таким образом, вы можете увидеть весь вывод. Или вы можете сделать что-то вроде этого:
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()
всякий раз, когда программа достигает возможного конца.
Несколько лучшее решение:
atexit([] { system("PAUSE"); });
в начале вашей программы.
Плюсы:
cin.sync(); cin.ignore();
вместо system("pause");
)Минусы:
extern "C" int __stdcall IsDebuggerPresent(void);
int main(int argc, char** argv) {
if (IsDebuggerPresent())
atexit([] {system("PAUSE"); });
...
}
Либо используйте:
cin.get();
или
system("pause");
Обязательно сделайте любой из них в конце функции main()
и перед оператором return
.
В моем случае я испытал это, когда создал проект Empty C++ в версии VS 2017 для сообщества. Вам нужно будет установить для подсистемы значение "Консоль (/SUBSYSTEM: CONSOLE)" в разделе "Свойства конфигурации".
Вы также можете использовать эту опцию
#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;
}
Используйте Console.ReadLine()
в конце программы. Это будет держать окно открытым, пока вы не нажмете клавишу Enter. Подробнее см. Https://docs.microsoft.com/en-us/dotnet/api/system.console.readline.
Visual Studio 2015, импорт. Потому что я ненавижу когда примеры кода не дают необходимых импортов.
#include <iostream>;
int main()
{
getchar();
return 0;
}