Как остановить консоль c
Перейти к содержимому

Как остановить консоль c

  • автор:

Как остановить немедленное завершение работы консольного приложения C++?

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

30 ответов:

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

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

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

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

вам нужно #include <cstdio> на getchar .

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

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

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

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

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

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

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

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

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

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

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

перед окончанием кода вставьте следующую строку:

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

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

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

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

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

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

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

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

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

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

35 ответов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как остановить немедленное завершение консольного приложения C ++?

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

задан 27 марта ’10, 11:03

Вы дважды щелкаете исполняемый файл? Вы работаете в Windows? Почему вы не работаете из командной оболочки и не вводите команды так, как вы хотите, чтобы они выполнялись? — S.Lott

@S Lott: Потому что, если вы нажмете кнопку «Go» в своей среде IDE, вам не придется возиться с консолью. — Billy ONeal

Вам следует подумать о приобретении хорошей книги для изучения C ++. Веб-сайты — это хорошие ресурсы, но они не подходят для хорошего вводного текста. Здесь есть исчерпывающий список книг по C ++: stackoverflow.com/questions/388242/… — James McNellis

@Billy Если нажатие кнопки Go закрывает приложение после его завершения, вы используете неправильную среду IDE. — anon

30 ответы

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

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

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

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

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

ответ дан 23 мая ’17, 13:05

getchar не решает проблему — по крайней мере, в ограниченных обстоятельствах. Он читает символ из stdin , но если уже есть символы, буферизованные из stdin, программа продолжит работу без ожидания, независимо от того, напечатаете ли вы приглашение или нет. — CB Бейли

@ Чарльз: Хороший момент. Игнорирование до \n является частичным решением, но не поможет, если буферизуется более одной строки ввода. Я не знаю стандартного способа C ++, чтобы очистить все из входного потока. : — / — Джеймс МакНеллис

@ Джеймс: Старый, но как насчет std::cin.ignore(std::cin.rdbuf()->in_avail()); ? Получил от здесь. — GManNickG

Один из вариантов, который я часто использую, — это std::cin.ignore(std::numeric_limits<std::streamsize>::max(), ‘\n’); с #include <limits> . — Ксео

Пожалуйста, не делай этого. 🙁 Это не входит в функции вашей программы. — Гонки легкости на орбите

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

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

ответ дан 27 мар ’10, в 15:03

Запускаете консоль из IDE? Как и зачем вы это сделали? — КодиБагштейн

Отлично, сработало. Почему это не поведение Visual Studio по умолчанию? — Освещение

Я также думал, что это был способ сделать это, до сегодняшнего дня, когда я создал простую консольную программу, и вышеуказанный метод не сработал 🙁 — КансайРобот

Есть ли версия этого с отладка? — удачи3р

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

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

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

ответ дан 27 мар ’10, в 15:03

Это похоже на вариант решения Руба Голдберга. — Дэйв Ван ден Эйнде

@ Дэйв Ван ден Эйнде: Это тоже довольно распространено и входит в стандартную комплектацию стандартного кода DevCPP. +1 — Билли Онил

@Dave, с другой стороны, дает понять, что это всего лишь уловка для примера, в то время как std: getch может быть случайно оставлен в реальном коде. — Мартин Беккет

Это идеальное решение для пользователей Windows. Хотя это не идеально, но работает — кошман

Самое простое и быстрое решение. Как раз то, что мне было нужно — КодиБагштейн

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

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

Щелкните правой кнопкой мыши имя проекта и перейдите на страницу «Свойства», разверните «Свойства конфигурации» -> «Компоновщик» -> «Система», выберите «Консоль» (/ SUBSYSTEM: CONSOLE) в раскрывающемся списке «Подсистема». Потому что по умолчанию в пустом проекте это не указано.

ответ дан 18 мая ’15, 21:05

Что, если это не консольное приложение? — Джесси Пеппер

@ Mr.Underhill Это будет только работать, если запускать без отладчика (Ctrl + F5). — Джонатан Ми

Помимо того, что это единственное решение, не связанное с взломом, это также единственный способ увидеть отпечатки из деструкторов объектов основного стека. — Понирос

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

ответ дан 27 мар ’10, в 16:03

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

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

ответ дан 27 мар ’10, в 16:03

Потому что, если вы используете IDE, вы обычно не используете консоль. Нажимаешь, программа запускается, и все. — Билли Онил

Любая компетентная IDE будет держать консоль на экране после завершения работы приложения — Code :: Blocks, например, делает именно это. — анон

@nobugz: Я разобрался. Чтобы окно оставалось неизменным, вы должны иметь / SUBSYSTEM: CONSOLE в командной строке компоновщика. В документации сказано, что это значение по умолчанию, если main определено, но если я не укажу его явно в командной строке, VS закроет окно при выходе из приложения. вздох — Джеймс МакНеллис

@James: это необходимо в первую очередь для получения окна консоли. Это, в свою очередь, требует main () вместо WinMain (), а не наоборот. Я немного заблудился . — Ганс Пассан

@nobugz: Если вы начинаете с «Пустого проекта» вместо «Консольного приложения Win32», подсистема не устанавливается явно в свойствах проекта. Если вы определите main в проекте компоновщик по умолчанию использует подсистему CONSOLE. При отладке или запуске вы получите окно консоли. Однако, если вы явно не укажете CONSOLE в качестве подсистемы в свойствах проекта, Visual Studio не будет держать окно консоли открытым. Я всегда начинаю с пустого проекта и редко меняю отдельные свойства проекта, поэтому я никогда не видел, чтобы окно консоли оставалось неизменным. Извините за путаницу — Джеймс МакНеллис

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

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

ответ дан 18 дек ’14, 17:12

Также было напечатано «Нажмите любую клавишу, чтобы продолжить . ». для меня. — ПапаОтель

Ты мог бы сделать system(«pause > nul»); если вы хотите, чтобы он приостанавливался, но не выводил текст на консоль, говоря: «Нажмите любую клавишу, чтобы продолжить . ». — Мадладзен

Позвонить cin.get(); 2 раз:

что, если нам понадобится еще один cin.get () для получения, например, некоторой строки внутри массива перед этим? В этом сценарии не работает. — QMaster

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

ответ дан 27 мар ’10, в 14:03

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

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

ответ дан 11 дек ’15, 20:12

Работает, но возвращается 0; не будет выполняться, если я использую этот код. — Вернерсбахер

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

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

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

ответ дан 27 мар ’10, в 16:03

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

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

ответ дан 27 мар ’10, в 15:03

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

ответ дан 04 окт ’11, 11:10

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

ответ дан 04 апр.

У меня это не работает, первая строка работает, но нажатие Enter ничего не делает — Qwertie

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

Обратите внимание, что здесь используется tchar.h макрос, чтобы быть совместимым с несколькими «наборами символов» (как их называет VC ++).

Как остановить закрытие консоли С++ сразу после первого ввода

Недавно я решил заняться изучением С++, и сначала это было довольно весело. Я столкнулся с проблемой закрытия консоли сразу после вывода, которую можно было решить, добавив System («пауза») теперь у меня есть программа, которая имеет два входа и после первого ввода консоль закрывается, не показывая мне никакого вывода, и я не мог исправить это с помощью системы («пауза»).

4 ответа

В Visual Studio запустите программу, нажав Ctrl + F5 .

Я думаю, вы все еще хотите использовать System(«PAUSE»).

Вы также можете использовать getch() в своей программе перед «возвратом 0». Система выйдет после того, как вы нажмете клавишу.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *