Использование System (& quot; pause & quot;), когда аргументы команд установлены в файл данных

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

В приглашении для программы требуется, чтобы для параметра «Аргументы команды» (расположенного в «Отладка-> Свойства-> Свойства конфигурации-> Отладка в Visual Studio 2013») был задан входной файл, чтобы я мог читать из файла с помощью «cin». Однако после установки этого свойства я заметил, что знакомая команда System («pause») больше не работает, чтобы держать окно консоли открытым. (Я изменил свойство обратно на его значение по умолчанию, и оно снова заработало, так что, похоже, это проблема.)

Есть объяснения? Мне действительно любопытно, что System («пауза») действительно делает в фоновом режиме.

0

Решение

system функция в Windows запускает экземпляр cmd.exe и просит его выполнить команду, которую вы передаете, которая pause в этом случае. Обычно cmd.exe будет ждать, пока пользователь нажмет клавишу. Другими словами, он считывает один символ из стандартного устройства ввода и возвращает его сразу после прочтения. Ну, вы дали ему файл в качестве стандартного устройства ввода, так что он читает один символ из этого файла и сразу же возвращается.

Он делает именно то, что вы просили. На заднем плане не происходит ничего таинственного.

Вы можете легко продемонстрировать это, просто введя pause < foo в командной строке, где foo это любой файл. Вы увидите, что pause немедленно возвращается в этом случае.

И, как указывает Дэвид Шварц в комментариях, используя system("pause") это ужасная практика. Если вам нужно дождаться продолжения пользовательского ввода, сделайте это самостоятельно с помощью простой пары cout а также cin звонки.

1

Другие решения

Других решений пока нет …