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


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

например, это будет типичное приложение "hello world":

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

какую строку я пропустил?

20 170

20 ответов:

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

окно консоли теперь будет оставаться открытым с Press any key to continue . . . сообщение после завершения работы программы.

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

  1. откройте свой проект и перейдите в Обозреватель решений. Если вы следуете вместе со мной в K&R, ваше "решение" будет "Привет" с 1 проектом под ним, а также " Привет смелый.
  2. щелкните правой кнопкой мыши на "hello" (или как там называется ваш проект.)
  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 <process.h>
system("pause");

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

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

для проектов makefile принятое решение не выполняется из - за ошибки в 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 выше.

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

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

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

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

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

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

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

cin.get (), или system("PAUSE"). Я не слышал, что вы можете использовать return(0);

Я #include <conio.h> и затем добавить 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<std::streamsize>::max(), '\n');

вы должны включить <iomanip> на 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, а затем выбрать консольное приложение Win32. Затем выберите пустой проект на этом этапе. Затем это позволяет получить то, что действительно хотел исходный вопроситель, не добавляя дополнительную точку остановки и код удержания. Я тоже прошел через эту проблему. Ответ также находится в MSDN сайт.

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

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

на команда введите $(ComSpec)

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

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

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