В настоящее время я пишу очень простую программу для класса и быстро понимаю, что никогда не знал, что делает команда System («пауза»).
В приглашении для программы требуется, чтобы для параметра «Аргументы команды» (расположенного в «Отладка-> Свойства-> Свойства конфигурации-> Отладка в Visual Studio 2013») был задан входной файл, чтобы я мог читать из файла с помощью «cin». Однако после установки этого свойства я заметил, что знакомая команда System («pause») больше не работает, чтобы держать окно консоли открытым. (Я изменил свойство обратно на его значение по умолчанию, и оно снова заработало, так что, похоже, это проблема.)
Есть объяснения? Мне действительно любопытно, что System («пауза») действительно делает в фоновом режиме.
system
функция в Windows запускает экземпляр cmd.exe
и просит его выполнить команду, которую вы передаете, которая pause
в этом случае. Обычно cmd.exe
будет ждать, пока пользователь нажмет клавишу. Другими словами, он считывает один символ из стандартного устройства ввода и возвращает его сразу после прочтения. Ну, вы дали ему файл в качестве стандартного устройства ввода, так что он читает один символ из этого файла и сразу же возвращается.
Он делает именно то, что вы просили. На заднем плане не происходит ничего таинственного.
Вы можете легко продемонстрировать это, просто введя pause < foo
в командной строке, где foo
это любой файл. Вы увидите, что pause
немедленно возвращается в этом случае.
И, как указывает Дэвид Шварц в комментариях, используя system("pause")
это ужасная практика. Если вам нужно дождаться продолжения пользовательского ввода, сделайте это самостоятельно с помощью простой пары cout
а также cin
звонки.
Других решений пока нет …