Другие языки программирования и технологии

Для чего нужны консольные программы, и что означает system("pause") в C++ ?

Доброго времени суток,
У меня при попытке вызвать system("pause") во время исполнения программы пишется такая фраза на экране: sh: pause: command not found
Но это ничего страшного. Поменял на std::cin.get(), читал где-то, что так правильнее. Но потом все равно возникли проблемы - слишком сложно как-то стало программу из башника вызывать.
Поэтому такой вопрос. С Вашей точки зрения, консольные приложения нужны в первую очередь для того, чтоб их пользователь вызывал, или чтобы другие программы их вызывали?
Спасибо!
Виталик Рябцев
Виталик Рябцев
19 662
Есть мнение, что вызовы через system это вообще зло, которого лучше избегать.

И да - приложения внешние для пользователя и скриптов, иначе Вы завязываетесь на систему, где та или иная команда может работать, а в другой не работать. Как Вы убедились в Linux pause нет, в отличие от Windows. Зато есть sleep =)

Есс-но если программу писать чисто для себя - то в принципе, можно и поблажку себе сделать, но лучше отвыкать сразу.

+ Есть мнение, что пауза (особенно перед выходом) консольной программы это ещё большее зло. Т. к. не позволяет нормально автоматизировать процессы
Андрей Вологжин
Андрей Вологжин
84 764
Лучший ответ
Виталик Рябцев Это оказался даже не Linux, но близко: -)

$uname -a
Darwin <hostname here> 13.4.0 Darwin Kernel Version 13.4.0: Sun Aug 17 19:50:11 PDT 2014; root:xnu-2422.115.4~1/RELEASE_X86_64 x86_64
Консольные программы (без интерактивного интерфейса) используются там, где нужна автоматизация технологического процесса. Они встречаются чаще, чем можно представить, обычно, когда надо обработать регулярно обновляемую информацию [b]без [/b} вмешательства юзера. нпрм, где-то в 4:00 МСК на данном сервисе запускается программа обновления рейтингов. Достаточно заглянуть в планировщик заданий, дабы убедиться, что такой формат актуален и активно используется. Собственно, из них выросли окошки.
Что касаемо удобства отладки, так это поправимо. Можно пользовать среду менеджера. нпрм Far Manager. В этом случае не нужно ни паузы, ни cin.get()
Вадим Рукавица
Вадим Рукавица
86 483
Глеб Парыгин Службы (windows) или демоны (*.nix) могут прекрасно справятся с задачами для автоматизации без интерфейса вообще.
Консольные программы нужны для обучения начинающих программистов.
V.
Vovka .
88 380
Виталик Рябцев OK. А можно тогда еще уточняющий вопрос.. . для чего еще они нужны? Хотя бы самые основные случаи использования, в которых консоль будет лучше, чем продвинутый интерфейс с окошками.
system() вызывает команду оболочки. system("pause") - это в Windows; но вообще это не очень хороший стиль программирования - вызывать еще одну программу для того, чтобы просто ввести ненужный символ. Ну и вообще - если программа предназначена для исполнения в консоли, то зачем там пауза?
А консольные программы нужны и для того, чтобы с ними работать пользователю, и для того, чтобы автоматизировать их выполнение с другими программами.
Павел Мищенко
Павел Мищенко
98 092
Консольные приложения нужны чтобы их из батника запускать, а не из кода проги. И кто тебе мешает pause в самом батнике прописать?
Павел Ширшиков
Павел Ширшиков
53 158
Виталик Рябцев IDE зачастую вызывает командно-строковый компилятор или линкер из кода проги. А консольные CGI-приложения, например, вызываются веб-сервером.
В обоих случаях получается, что консольное приложение вызывается из кода полноценной проги, а не скрипта.

Получается, они просто спроектированы ошибочно?
> У меня при попытке вызвать system("pause")
У вас Linux, Mac или другая ОС, отличная от винды, system() не работает ровно потому же, почему на этих ОС не работают виндовые батники. system() использует тот же интерпретатор, который выполняет батники.




А консоль еще хороша для экспериментов с какой-то новой сторонней библиотекой. Нужно создать пробный проект и разобраться как с этой библиотекой работать. GUI создавать лень, а какой-то ввод-вывод нужен.
system("pause"); - пауза в консоли (после выполнения программы или после определенного действия)
AS
Adil Sericov
8 067