Как открыть окно консоли в 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;
}