MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Пауза консоли в C++"
Answer 794355
Если речь идет только о работе в IDE, для приостановки работы программы можно использовать обычные точки останова и отладчик, какие-то специальные вызовы в коде не нужны. Более того, использование вызовов типа system("pause") приведет к тому, что программу невозможно будет нормально вызывать из пакетных файлов: она будет каждый раз ждать ввода с реальной консоли, даже если стандартный ввод перенаправлен из файла и ожидалась работа без участия пользователя. Но, если все же действительно нужно приостановить консоль при любом запуске программы, есть несколько вариантов:
system("PAUSE");
Особенности:
- Отображает приглашение ввода ("Нажмите любую клавишу")
- Прерывает работу программы до нажатия любой клавиши
- Работает только под Windows (в других ОС нет команды PAUSE)
- Внутренне вызывает командный интерпретатор, поэтому считается "тяжелым" вариантом (если производительность что-то значит в данном случае)
Есть миф, что такой вызов небезопасен, так как если поместить в папку с программой вредоносный файл pause.exe, он будет вызван вместо команды PAUSE. Это не так в современных версиях Windows.
system("PAUSE>nul");
То же самое, но не отображает приглашение ввода.
getchar(); //С cin.get(); //C++
Особенности:
- Не отображает приглашение ввода
- Прерывает работу программы до нажатия клавиши Enter
- Стандартная функция - работает в любом окружении
В отличие от других вариантов, не ломает перенаправление стандартного ввода (достаточно поместить на вход строку любого содержания, и выполнение программы пойдет дальше).
#include <conio.h> getch(); //Традиционная _getch(); //Современный вариант
Особенности:
- Не отображает приглашение ввода
- Прерывает работу программы до нажатия любой клавиши
- Нестандартная функция, доступна в DOS и Windows (в других ОС есть похожие аналоги)
Опять же, существует миф, что в Windows это какой-то DOSовский вызов и использовать его - дикий криминал. На самом деле, внутренне он реализуется как обычный вызов WINAPI-функции ReadConsoleInput, с предварительным отключением у консоли режима ENABLE_LINE_INPUT. Убедиться в этом можно, заглянув в исходники отладочной версии CRT, которые с некоторого времени частично открыты.
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.