Как немедленно закрыть консольное приложение С++?

В последнее время я пытаюсь изучить С++ из этого веб-сайта. К сожалению, всякий раз, когда я пытаюсь запустить один из примеров кода, я вижу, что эта программа открыта примерно на полсекунды, а затем сразу же закрывается. Есть ли способ немедленно закрыть программу, чтобы я мог видеть плоды моих усилий?

Ответ 1

Изменить: Как справедливо отмечает Чарльз Бейли в комментарии ниже, это не сработает, если в stdin есть символы, буферизированные, и на самом деле нет хорошего способа обойти это. Если вы используете прилагаемый отладчик, предлагаемое решение John Dibling, вероятно, является самым чистым решением вашей проблемы.

Тем не менее, я оставлю это здесь, и, возможно, кто-то найдет это полезным. Я часто использовал его в качестве быстрого взлома при написании тестов во время разработки.


В конце вашей функции main вы можете вызвать std::getchar();

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

Вам нужно #include <cstdio> для getchar.

Ответ 2

Если вы используете Visual Studio, и вы запускаете консольное приложение из среды IDE:

нажатие CTRL-F5 (запуск без отладки) запустит приложение и откроет окно консоли, пока вы не нажмете любую клавишу.

Ответ 3

Решение James работает для всех платформ.

В качестве альтернативы на Windows вы также можете добавить следующее перед возвратом из функции main:

  system("pause");

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

Ответ 4

Если вы используете Microsoft Visual С++ 2010 Express и столкнулись с проблемой: CTRL + F5 не работает для того, чтобы консоль открылась после завершения программы, посмотрите этот поток MSDN.

Вероятно, ваша IDE настроена на закрытие консоли после запуска CTRL + F5; на самом деле, "пустой проект" в Visual С++ 2010 закрывает консоль по умолчанию. Чтобы изменить это, сделайте так, как предположил Microsoft-модератор:

Пожалуйста, щелкните правой кнопкой мыши имя вашего проекта и перейдите на страницу "Свойства", пожалуйста, перейдите в "Свойства конфигурации" → "Линкер" → "Система", выберите "Консоль" (/SUBSYSTEM: CONSOLE) в раскрывающемся списке SubSystem. Поскольку по умолчанию проект Empty не указывает его.

Ответ 5

Обычно я просто устанавливаю точку останова на main(), закрывая фигурные скобки. Когда конец программы будет достигнут любым способом, на который ударит точка останова, и вы можете ALT-Tab в окне консоли, чтобы просмотреть результат.

Ответ 6

Почему бы не просто запустить программу с консоли, а запустить программу из cmd.exe, если вы используете Windows. Таким образом, окно остается открытым после завершения программы.

[EDIT]: Когда я использую KDevelop4, на вкладке внизу среды IDE имеется полностью установленный экземпляр Bash (CLI Linux). Это то, что я использую в таких обстоятельствах.

Ответ 7

До конца кода вставьте эту строку:

system("pause");

Это будет держать консоль до тех пор, пока вы не нажмете клавишу.

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string s;
    cout << "Please enter your first name followed by a newline\n";
    cin >> s;
    cout << "Hello, " << s << '\n';
    system("pause"); // <----------------------------------
    return 0; // This return statement isn't necessary
}

Ответ 8

Вызвать cin.get(); 2 раза:

    //...
    cin.get();
    cin.get();
    return 0
}

Ответ 9

Если вы запустите свой код из компетентной среды разработки, например Code:: Blocks, среда IDE будет управлять консолью, которую она использует для запуска код, сохраняя его открытым, когда приложение закрывается. Вы не хотите добавлять специальный код, чтобы консоль открывалась, потому что это предотвратит его правильное функционирование, если вы используете его на самом деле, вне среды IDE.

Ответ 10

Если вы действительно отлаживаете свое приложение в Visual С++, нажмите F5 или зеленый треугольник на панели инструментов. Если вы на самом деле не отлаживаете его (у вас нет установленных точек останова), нажмите Ctrl + F5 или выберите "Начать без отладки" в меню (обычно это в меню "Отладка", которое, я согласен, сбивает с толку.) Это будет немного быстрее, и что более важно для вас, остановится в конце, если вам не придется менять свой код.

В качестве альтернативы откройте командную строку, перейдите в папку, в которой находится ваш exe, и запустите ее, набрав ее имя. Таким образом, когда он закончил выполнение командной строки, она не закрывается, и вы можете увидеть результат. Я предпочитаю оба этих метода добавлять код, который останавливает приложение так же, как и его завершение.

Ответ 11

Хорошо, я предполагаю, что вы работаете в Windows с помощью Visual Studio... почему? Хорошо, потому что если вы находитесь на какой-то ОС Linux, вы, вероятно, будете запускать ее с консоли.

В любом случае вы можете добавить crap в конец вашей программы, как предлагают другие, или просто нажать CTRL + F5 (начать без отладки), а Visual Studio покинет консоль до завершения.

Другой вариант, если вы хотите запустить версию Debug, а не добавить дерьмо к вашему коду, - это открыть окно консоли (Пуск → Выполнить → cmd) и перейти к отладочному каталогу. Затем просто введите имя исполняемого файла и запустите программу отладки в консоли. Затем вы можете использовать приложение Visual Studio для обработки или что-то еще, если вы действительно этого хотите.

Ответ 12

Добавьте следующие строки перед любой функцией exit() или перед любым return в main():

std::cout << "Paused, press ENTER to continue." << std::endl;
cin.ignore(100000, "\n");

Ответ 13

Просто добавьте следующее в конце своей программы. Он попытается зафиксировать некоторую форму ввода пользователя, таким образом, он не позволит автоматически закрывать консоль.

cin.get();

Ответ 14

Для Visual Studio (и только Visual Studio) следующий фрагмент кода дает вам приглашение "дождаться нажатия клавиши для продолжения", которое действительно ждет, когда пользователь будет явно нажимать новый ключ, сначала очистив входной буфер:

#include <cstdio>
#include <tchar.h>
#include <conio.h>

_tprintf(_T("Press a key to continue "));
while( _kbhit() /* defined in conio.h */ ) _gettch();
_gettch();

Обратите внимание, что для этого используется макрос tchar.h для совместимости с несколькими "наборами символов" (как их называет VС++).

Ответ 15

Вместо того, чтобы нажимать кнопку запуска, одновременно нажмите клавиши CTRL и F5, это даст вам нажать любую клавишу для продолжения сообщения. Или введите "(предупреждение использовать это только для тестирования не актуальных программ, поскольку антивирусы им не нравятся!!!!)" в конце вашей основной функции, но: (предупреждение использовать это только для тестирования не реальных программ в качестве антивирусов дона 't нравится это!!!!)

Ответ 16

Используйте #include "stdafx.h" и system("pause"); так же, как и код ниже.

#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
    std::cout << "hello programmer!\n\nEnter 2 numbers: ";
    int x, y;
    std::cin >> x >> y;
    int w = x*y;
    std::cout <<"\nyour answer is: "<< w << endl;
    system("pause");
}

Ответ 17

Посмотрите, есть ли у вашей IDE флажок в настройке проекта, чтобы окно оставалось открытым после завершения программы. Если нет, используйте std::cin.get(); для чтения символа в конце основной функции. Однако не забудьте использовать только линейный вход (std:: getline) или обрабатывать оставшиеся непрочитанные символы в противном случае (std:: ignore до новой строки), потому что иначе конец .get() будет читать только выведенный мусор непрочитанных ранее.

Ответ 18

Вы даже можете объявить целое число в начале вашей функции main() (скажем int a;) и поместить std::cin >> a; непосредственно перед возвращаемым значением. Таким образом, программа будет работать до тех пор, пока вы не нажмете клавишу и не войдете.

Ответ 19

Это работает хорошо:

cin.clear();
cin.ignore(2);

Если вы сначала очистите буфер, это не будет проблемой при чтении следующего. По какой-то причине cin.ignore(1) не работает, оно должно быть 2.

Ответ 20

Все, что вам нужно сделать, установите переменную для x, затем просто введите это перед возвратом 0;

cout<<"\nPress any key and hit enter to end...";
cin>>x;

Ответ 21

Вы всегда можете создать пакетный файл. Например, если ваша программа называется helloworld.exe, некоторый код будет:

@echo off
:1
cls
call helloworld.exe
pause >nul
goto :1

Ответ 22

Я помещаю точку останова при последнем возврате 0 программы. Он отлично работает.

Ответ 23

просто

int main(){
    // code...
    getchar();
    getchar();
    return 0;
}

Ответ 24

Я использовал cin.get(), и это сработало, но в один прекрасный день мне нужно было использовать еще один cin.get([Array Variable]) до этого, чтобы захватить строку строки с пустым символом в середине. поэтому cin.get() не закрыл окно командной строки. Наконец, я нашел другой способ: Нажмите CTRL + F5, чтобы открыть его во внешнем окне, а Visual Studio больше не контролирует его. Просто спросите вас о закрытии после запуска последних команд.

Ответ 25

Я просто делаю это:

//clear buffer, wait for input to close program
std::cin.clear(); std::cin.ignore(INT_MAX, '\n');
std::cin.get();
return 0;

Примечание: очистка буфера cin и это необходимо только в том случае, если вы использовали cin в какой-то момент раньше в вашей программе. Кроме того, использование std:: numeric_limits:: max(), вероятно, лучше, чем INT_MAX, но оно немного многословно и обычно не нужно.

Ответ 26

Я попытался добавить функцию getchar() в конец. Но это не сработало. Так что я сделал, добавлял две функции getchar() один за другим. Я думаю, что первый getchar() поглощает клавишу Enter, которую вы нажимаете после последнего ввода данных. Поэтому попробуйте добавить две функции getchar() вместо одной

Ответ 27

Аналогичная идея для ответа yeh, минимальная альтернатива.

Создайте пакетный файл со следующим содержимым:

helloworld.exe
pause

Затем используйте командный файл.

Ответ 28

#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{

    cout << "Press any key to continue...";
    getch();

    return 0;
}

Я не заметил, что кто-то еще разместил это, так что вот оно.

Ответ 29

просто используйте cin.ignore() прямо перед возвратом 0; дважды

main()
  {
  //your codes 

  cin.ignore();
  cin.ignore();

  return 0;
  }

thats all

Ответ 30

Если вы используете Windows, вы можете сделать system("pause >nul"); или system("pause");. Он запускает консольную команду для приостановки программы, пока вы не нажмете клавишу. >nul препятствует тому, чтобы он говорил Press any key to continue....