Как открыть окно консоли в Visual С++?
Я начинаю работать в Visual С++, и я хотел бы знать, как сохранить консольное окно.
Например, это будет типичное приложение "привет мир":
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
return 0;
}
Какая строка мне не хватает?
Ответы
Ответ 1
Запустите проект Ctrl+F5 вместо F5.
Окно консоли останется открытым с сообщением Press any key to continue . . .
после выхода программы.
Обратите внимание, что для этого требуется опция компоновщика Console (/SUBSYSTEM:CONSOLE)
, которую вы можете включить следующим образом:
- Откройте проект и перейдите в Обозреватель решений. Если вы будете вместе со мной в K & R, ваше "решение" будет "привет" с 1 проектом под ним, а также "привет" выделено жирным шрифтом.
- Щелкните правой кнопкой мыши по "привет" (или независимо от имени вашего проекта.)
- Выберите "Свойства" в контекстном меню.
- Выберите "Свойства конфигурации" > "Компоновщик" > "Система".
- Для свойства "Подсистема" в правой панели щелкните раскрывающийся список в столбце справа.
- Выберите "Консоль (/SUBSYSTEM: CONSOLE)"
- Нажмите "Применить" , дождитесь, пока он закончит выполнение того, что он делает, затем нажмите "ОК". (Если "Применить" выделено серым цветом, выберите другой параметр подсистемы, нажмите "Применить" , затем вернитесь и примените консольную опцию. Мой опыт в том, что ОК сам по себе не будет работать.)
CTRL-F5 и подсказки подсистемы работают вместе; они не являются отдельными опциями.
(Предоставлено DJMorreTX из http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/21073093-516c-49d2-81c7-d960f6dc2ac6)
Ответ 2
Стандартный способ - cin.get()
перед оператором return.
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Hello World";
cin.get();
return 0;
}
Ответ 3
Поместите точку останова в строку return
.
Вы запускаете его в отладчике, правильно?
Ответ 4
Другим вариантом является использование
#include <process.h>
system("pause");
Хотя это не очень портативно, потому что он будет работать только в Windows, но он автоматически распечатает
Нажмите любую клавишу для продолжения...
Ответ 5
Для проектов make файлов принятое решение выходит из строя из-за ошибки в Visual Studio (которая присутствует, по крайней мере, до версии 2012 года - я еще не тестировал 2013). Эта ошибка подробно описана здесь.
Чтобы приостановить консоль после завершения программы в проекте makefile, выполните следующие действия (это может отличаться для версий, отличных от 2010 - 2012):
1) Передайте /SUBSYSTEM:CONSOLE
в компоновщик. - EDIT: см. ниже.
2) Откройте файл проекта (.vcxproj) в текстовом редакторе.
3) Внутри корневого тега <project>
вставьте следующее:
<ItemDefinitionGroup>
<Link>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
4) Перезагрузите проект в своем решении.
5) Запустите программу без отладки (CTRL + F5).
EDIT:
В соответствии с моим комментарием ниже установка опции компоновщика /SUBSYSTEM:CONSOLE
фактически не имеет отношения к проектам makefile (и не обязательно даже возможна, если вы используете компилятор, отличный от MSVC). Все, что имеет значение, заключается в том, что параметр добавляется в файл .vcxproj, как описано выше на шаге 3.
Ответ 6
Вы можете использовать cin.get();
или cin.ignore();
непосредственно перед вашим оператором return, чтобы не закрывать окно консоли.
Ответ 7
просто поставить точку останова на последнюю фигурную скобку main.
int main () {
//...your code...
return 0;
} //<- breakpoint here
он работает для меня, нет необходимости запускать без отладки. Он также выполняет деструкторы перед ударом точки останова, чтобы вы могли проверять любые сообщения на этих деструкторах, если у вас есть.
Ответ 8
Просто добавьте точку останова к закрывающей скобке вашего метода _tmain
. Это проще, и вам не нужно добавлять код для отладки.
Ответ 9
Поместите точку останова на конечную фигуру main()
. Он сработает даже с несколькими операторами return
. Единственным недостатком является то, что вызов exit()
не будет обнаружен.
Если вы не отлаживаете, следуйте советам в ответе Zoidberg и запустите свою программу с помощью Ctrl + F5 вместо F5.
Ответ 10
просто добавьте system ("pause") в конце кода перед возвратом 0, как это
#include <stdlib.h>
int main()
{
//some code goes here
system("pause")
return 0;
}
Ответ 11
cin.get()
или system("PAUSE")
. Я не слышал, что вы можете использовать return(0);
Ответ 12
Я включаю #include <conio.h>
, а затем добавляю getch();
непосредственно перед строкой return 0;
. Это то, чему я учился в школе. Описанные выше методы совершенно разные, я вижу.
Ответ 13
Была такая же проблема. Я использую _getch()
непосредственно перед оператором return. Оно работает.
Ответ 14
Мои 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<std::streamsize>::max(), '\n');
Вам нужно включить <iomanip>
для std::numeric_limits
Ответ 15
(Некоторые параметры могут быть вызваны разными именами. Я не использую английскую версию)
У меня была та же проблема, когда я создал проекты с опцией "пустой проект", "Создать проект как" приложение Win32-console "вместо" пустого проекта ". В появившемся диалоговом окне нажмите" продолжить", после чего вы можете проверить опцию "пустой проект" и нажать "подтвердить". После этого CTRL + F5 откроет консоль, которая не закрывается автоматически.
Ответ 16
У меня была та же проблема; В моем приложении есть несколько точек exit(), и не было никакого способа узнать, где именно он выходит, тогда я узнал об этом:
atexit(system("pause"));
или
atexit(cin.get());
Таким образом, он остановится независимо от того, где мы выходим в программе.
Ответ 17
Другая опция:
#ifdef _WIN32
#define MAINRET system("pause");return 0
#else
#define MAINRET return 0
#endif
В основном:
int main(int argc, char* argv[]) {
MAINRET;
}
Ответ 18
Фактически, реальное решение - это выбор самого шаблона проекта. Вы ДОЛЖНЫ выбрать Консольное приложение Win32 в более старом VS или сначала ввести имя проекта, а затем дважды щелкнуть мастер Windows Desktop и выбрать консольное приложение Win32. Затем выберите пустой проект в этот момент. Затем это позволяет делать то, что действительно требовал первоначальный вопросник, не добавляя лишнюю точку остановки и код удержания. Я тоже прошел через эту проблему. Ответ также находится на сайте MSDN.
Ответ 19
Здесь можно открыть окно командной строки независимо от того, как выполнение останавливается без изменения какого-либо кода:
В Visual Studio откройте страницы свойств проекта → Отладка.
Для команды введите $(ComSpec)
Для аргументов команды введите /k $(TargetPath)
. Добавьте любые аргументы в свое приложение.
Теперь F5 или Ctrl-F5 запускает Windows/System32/cmd.exe в новом окне и /k гарантирует, что командная строка останется открытой после завершения выполнения.
Недостатком является то, что выполнение не останавливается на контрольных точках.
Ответ 20
int main()
{
//...
getchar();
return 0;
}
Ответ 21
Самый простой способ разместить
Console.ReadLine();
В конце программы.
Ответ 22
вы можете просто положить
keep_window_open();
перед возвращением здесь приведен один пример
int main()
{
cout<<"hello world!\n";
keep_window_open ();
return 0;
}