Как остановить приложение консоли C ++ немедленно выйти?

StackOverflow https://stackoverflow.com/questions/2529617

Вопрос

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

Это было полезно?

Решение

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

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


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

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

Тебе следует #include <cstdio> за getchar.

Другие советы

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

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

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

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

  system("pause");

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

Если вы используете Microsoft Visual C ++ 2010 Express и столкнетесь с проблемой с Ctrl+F5 Не работая на поддержание консоли открытой после прекращения программы, взгляните на эта поток MSDN.

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

Пожалуйста, щелкните правой кнопкой мыши имени проекта и перейдите на страницу «Свойства», пожалуйста, разверните свойства конфигурации -> Linker -> System, выберите Console (/Subsystem: Console) в выпадении подсистемы. Потому что по умолчанию пустой проект не указывает его.

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

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

РЕДАКТИРОВАТЬ]: Когда я использую kdevelop4, существует полностью сбежный экземпляр Bash (CLI Linux), работающего на вкладке внизу IDE. Что я использую в таких обстоятельствах.

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

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
}

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

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

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

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

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

Еще один вариант, если вы хотите запустить версию отладки и не добавить дерьмо в свой код, -это открыть окно консоли (start -> run -> cmd) и перейдите к вашему Отладка вывода каталога. Анкет Затем просто введите имя вашего исполняемого файла, и он запустит вашу программу отладки в консоли. Затем вы можете использовать прикрепление Visual Studio для процесса или что -то в этом роде, если вы действительно хотите.

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

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

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

cin.get();

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

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

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

#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 Макро будут совместимы с несколькими «наборами символов» (как вызывает их VC ++).

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

//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, но это немного многословно и обычно ненужнее.

Использовать #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");
}
#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{

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

    return 0;
}

Я не заметил, что кто -то еще опубликовал это, так что вот оно.

Подобная идея дари Ответ, просто минималистская альтернатива.

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

helloworld.exe
pause

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

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

Кажется, это работает хорошо:

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

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

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

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

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

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

просто

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

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

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

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

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

main()
  {
  //your codes 

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

  return 0;
  }

это все

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top