Обходной путь getchar() в c/ C++ для перенаправления вывода
У меня есть исполняемый файл, который написан на C++, и я запускаю его в cmd.exe на Windows
Когда я запускаю этот исполняемый файл и, глядя на исходный код, я вижу, что использование getchar()
функция сделана - программа просит пользователя "нажать любую клавишу, чтобы продолжить", и я вижу, что getchar()
вызывается, так что программа не продолжается, пока пользователь не нажмет любую клавишу.
Моя проблема в том, что вывод программы слишком длинный, поэтому я хочу перенаправить его в файл... (с символом перенаправления >
)
Поэтому, когда я запускаю exe, как это в cmd.exe:
prg > temp.txt
Программа застревает, я предполагаю, что это потому, что она ждет ввода (я пытался нажать любую клавишу, но она не работает).
Когда я запускаю программу, не перенаправляя ее в файл, все работает нормально, пока я нажимаю любую клавишу при появлении запроса...
Я бы просто стерла все getchar()
звонки, но я не могу изменить исходный код, потому что у меня нет всех ресурсов для его повторной компиляции.
Есть ли решение моей проблемы?
1 ответ
getchar
обычно использует буферизованный ввод. То есть, с точки зрения пользователя, он не ждет какой-либо клавиши, а скорее ожидает нажатия клавиши Enter.
Вы должны нажать Enter один раз для каждого getchar
что программа делает. Или, альтернативно, в первый раз getchar
(хотя вы можете только догадываться, когда это так, потому что подсказки нет), введите длинную строку:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
После того как вы нажмете Enter, последующие 30 getchar
вызовы получат a
следующий получит \n
, а следующий будет зависать, ожидая большего ввода (но не будет никакого приглашения).
Другой возможный способ заставить это работать: перенаправить некоторый ввод в вашу программу:
echo aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | prg > temp.txt
Убедитесь, что у вас достаточно информации, чтобы удовлетворить все getchar
звонки.