Обходной путь 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 звонки.

Другие вопросы по тегам