В последнее время я пытался изучить C ++ с этого сайта . К сожалению, всякий раз, когда я пытаюсь запустить один из примеров кода, я вижу, что программа открывается примерно на полсекунды, а затем сразу же закрывается. Есть ли способ остановить немедленное закрытие программы, чтобы я мог видеть плоды моих усилий?
193
Ответы:
Изменить: как справедливо указывает Чарльз Бейли в комментарии ниже, это не будет работать, если есть буферизированные символы
stdin
, и действительно нет хорошего способа обойти это. Если вы работаете с отладчиком, предложенное решение Джона Диблинга, вероятно, является самым чистым решением вашей проблемы.Тем не менее, я оставлю это здесь, и, возможно, кто-то найдет это полезным. Я часто использовал его как быстрый способ взлома при написании тестов во время разработки.
В конце вашей
main
функции вы можете позвонитьstd::getchar();
При этом будет получен один символ
stdin
, что даст вам поведение «нажать любую клавишу для продолжения» (если вы действительно хотите получить сообщение «нажмите любую клавишу», вам придется печатать его самостоятельно).Вам нужно
#include <cstdio>
дляgetchar
.источник
getchar
не решает проблему - или только в ограниченных обстоятельствах, по крайней мере. Он читает символ изstdin
, но если в stdin уже есть буферизованные символы, программа продолжит работу без ожидания, независимо от того, печатаете ли вы приглашение или нет.\n
является частичным решением, но не поможет, если буферизуется более одной строки ввода. Я не знаю стандартного C ++ способа очистить все от входного потока. : - /std::cin.ignore(std::cin.rdbuf()->in_avail());
? Получил это отсюда .std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
с#include <limits>
.Если вы используете 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:
источник
Я обычно просто ставлю точку останова на
main()
закрывающую фигурную скобку. Когда конец программы достигнут любыми средствами, будет достигнута точка останова, и вы можете нажать ALT-Tab в окне консоли, чтобы просмотреть вывод.источник
Почему бы просто не запустить программу из консоли, т.е. запустить программу из cmd.exe, если вы используете Windows. Таким образом, окно остается открытым после завершения программы.
[EDIT]: когда я использую KDevelop4, на вкладке в нижней части IDE запускается полноценный экземпляр Bash (Linux CLI). Что я и использую в подобных обстоятельствах.
источник
main
оно определено, но если я не установлю его явно в командной строке, VS закроет окно при выходе из приложения. вздохmain
в проекте, компоновщик по умолчанию использует подсистему CONSOLE. При отладке или запуске вы получите окно консоли. Однако, если вы явно не укажете CONSOLE в качестве подсистемы в свойствах проекта, Visual Studio не будет держать окно консоли открытым. Я всегда начинаю с пустого проекта и редко изменяю отдельные свойства проекта, поэтому никогда не видел, чтобы окно консоли зависало. Извините за путаницуПеред концом вашего кода вставьте эту строку:
Это будет держать консоль, пока вы не нажмете клавишу.
источник
Звоните
cin.get();
2 раза:источник
Если вы запускаете свой код из компетентной IDE, такой как Code :: Blocks , IDE будет управлять консолью, которую он использует для запуска кода, оставляя ее открытой при закрытии приложения. Вы не хотите добавлять специальный код, чтобы держать консоль открытой, потому что это помешает ее правильной работе, когда вы используете ее по-настоящему вне среды IDE.
источник
Хорошо, я предполагаю, что вы работаете в Windows, используя Visual Studio ... почему? Ну, потому что если вы работаете в какой-то операционной системе Linux, вы, вероятно, запустите ее с консоли.
В любом случае, вы можете добавить дерьмо в конец вашей программы, как предлагают другие, или вы можете просто нажать CTRL + F5 (запуск без отладки), и Visual Studio оставит консоль включенной после завершения.
Другой вариант, если вы хотите запустить версию Debug и не добавлять дерьмо в свой код, это открыть окно консоли (Пуск -> Выполнить -> cmd) и перейти к выходному каталогу Debug . Затем просто введите имя вашего исполняемого файла, и он запустит вашу программу отладки в консоли. Затем вы можете использовать присоединение Visual Studio к процессу или что-то еще, если хотите.
источник
Я не заметил, кто-нибудь еще опубликовать это, так что вот оно.
источник
conio.h
это специфичный для Windows заголовок, который может быть недоступен на каждом компьютере (или вам может потребоваться связать его отдельно, что является излишним).Если вы на самом деле отлаживаете свое приложение в Visual C ++, нажмите F5 или зеленый треугольник на панели инструментов. Если вы на самом деле не отлаживаете его (у вас нет установленных точек останова), нажмите Ctrl + F5 или выберите «Пуск без отладки» в меню (обычно это меню «Отладка», что, я согласен, сбивает с толку.) Это будет немного быстрее, и, что более важно для вас, в конце остановится, и вам не придется менять код.
Либо откройте командную строку, перейдите в папку, в которой находится исполняемый файл, и запустите ее, введя ее имя. Таким образом, когда он завершится, командная строка не закроется, и вы увидите результат. Я предпочитаю оба этих метода, чтобы добавить код, который останавливает приложение, как только оно закончено.
источник
Просто добавьте следующее в конце вашей программы. Он попытается отразить какую-либо форму ввода пользователя, таким образом, он останавливает автоматическое закрытие консоли.
источник
Добавьте следующие строки перед любой
exit()
функцией или перед любойreturn
s вmain()
:источник
Для Visual Studio (и только Visual Studio) следующий фрагмент кода дает вам приглашение «ждать продолжения нажатия клавиши», которое действительно ожидает, когда пользователь явно нажмет новую клавишу, сначала очистив входной буфер:
Обратите внимание, что здесь используются
tchar.h
макросы для совместимости с несколькими «наборами символов» (как их называет VC ++).источник
Я просто делаю это:
Примечание: очистка буфера cin и это необходимо, только если вы использовали cin ранее в вашей программе. Также использование std :: numeric_limits :: max (), вероятно, лучше, чем INT_MAX, но это немного многословно и обычно не нужно.
источник
Используйте
#include "stdafx.h"
& такsystem("pause");
же, как код ниже.источник
system
объявлен в<cstdlib>
, неstdafx.h
.Аналогичная идея Yeh ответа, просто минималистская альтернатива.
Создайте командный файл со следующим содержимым:
Затем используйте командный файл.
источник
просто
по какой-то причине при запуске программы обычно можно прочитать 1 символ с помощью getchar, уже находящегося в stdin. поэтому первый getchar читает этот символ, а второй getchar ждет ввода пользователя (вашего) перед выходом из программы. И после выхода из программы большинство терминалов, особенно в Windows, немедленно закрывают терминал. так что мы стремимся к простому способу предотвращения завершения программы после того, как она все выведет. Конечно, есть более сложные и чистые способы решения этой проблемы, но это самый простой.
источник
Посмотрите, есть ли в вашей IDE флажок в настройках проекта, чтобы окно оставалось открытым после завершения программы. Если нет, используйте
std::cin.get();
для чтения символа в конце основной функции. Тем не менее, убедитесь, что вы используете только строчный ввод (std :: getline) или имеете дело с остальными непрочитанными символами в противном случае (std :: ignore до новой строки), потому что в противном случае .get () в конце будет читать только мусор, который вы оставили непрочитано ранее.источник
Кажется, это хорошо работает:
Если вы сначала очистите буфер, это не будет проблемой при чтении следующего. Почему-то
cin.ignore(1)
не работает, должно быть 2.источник
cin.rdbuf()->in_avail
. Не какое-то магическое число, такое как 1 или 2.Вы всегда можете просто создать командный файл. Например, если ваша программа называется helloworld.exe, некоторый код будет:
источник
Если вы используете Windows, то вы можете сделать
system("pause >nul");
илиsystem("pause");
. Он выполняет консольную команду, чтобы приостановить программу, пока вы не нажмете клавишу.>nul
мешает это сказатьPress any key to continue...
.источник
Я ставлю точку останова на последнем возврате 0 программы. Работает нормально.
источник
Я использовал,
cin.get()
и это сработало, но однажды мне нужно было использовать другойcin.get([Array Variable])
перед этим, чтобы получить строку с пустым символом в середине. чтобыcin.get()
не закрывать окно командной строки. Наконец, я нашел другой способ: нажмите CTRL + F5, чтобы открыть во внешнем окне, и Visual Studio больше не может его контролировать. Просто спросит вас о закрытии после запуска финальных команд.источник
Я попытался поставить
getchar()
функцию в конце. Но это не сработало. Поэтому я добавил двеgetchar()
функции одна за другой. Я думаю, что перваяgetchar()
поглощает Enterклавишу, которую вы нажимаете после последнего ввода данных. Поэтому попробуйте добавить двеgetchar()
функции вместо однойисточник
Вместо того, чтобы нажимать кнопку запуска, нажмите CTRL и F5 одновременно, это даст вам любую клавишу для продолжения сообщения. Или введите «(предупреждение используйте это только для тестирования не настоящих программ, так как антивирусам это не нравится !!!!)» в конце вашей основной функции, но: (предупреждение используйте это только для тестирования не реальных программ, так как антивирусы не не понравится !!!!)
источник
просто используйте cin.ignore () перед возвратом 0; дважды
вот и все
источник
Все, что вам нужно сделать, это установить переменную для x, затем просто набрать ее до возврата 0;
источник
Вы даже можете объявить целое число в начале вашей
main()
функции (скажемint a;
) и поставитьstd::cin >> a;
непосредственно перед возвращаемым значением. Таким образом, программа будет продолжать работать, пока вы не нажмете клавишу и не войдете.источник