Поскольку комментарии к вам стали неуместны, я сделаю это вики-сообществом и начну с вопросительного предложения, которое содержится в комментариях:
Проверьте возвращаемые значения из всех вызовов scanf
.Сначала сделайте это, чтобы определить, передает ли API стандартной библиотеки вам информацию - посредством «электростатической передачи», иначе называемой содержимым регистра eax
после вызова scanf
в архитектуре x86.Не позволяйте свету в этом регистре умереть незамеченным.Возьмите электрические заряды регистра (биты) в переменную и сравните их с нулем (0) и EOF
.Эти инопланетные передачи были отправлены вам с 1976 года, когда scanf
был впервые написан для возврата информативного числового значения вызывающей стороне.
Как указал Томлогик в комментариях к ответу, если вы вставляетеданные, вы должны вместо этого попробовать использовать технику, известную как «перенаправление ввода» или «трубопровод».Сначала поместите ваши данные в файл, скажем, name filename.dat .Затем введите команду, такую как:
executable-name < <em>filename.dat</em>
Где имя-файла-исполняемого файла - это файл, который вы генерируете с помощью компилятора Си.Технически, приведенный выше синтаксис создает «перенаправление ввода» или «перенаправление stdin» - оболочка открывает файл для доступа на чтение как нулевой дескриптор файла (0), также известный как stdin
.Дочерняя программа, порожденная из оболочки, извлекает scanf
из файла, а не из терминала (буфер вставки).
Другой подход заключается в создании «перенаправления канала», при котором оболочка открывает еще один * 1021.* обрабатывает вывод для чтения и передает его потомку, снова как stdin
дескриптор файла.В этом случае оболочка, вероятно, использует popen
вместо open
.Синтаксис для этого может быть:
cat <em>filename.dat</em> | executable-name
, как будто на Unix-клоне, или
type <em>filename.dat</em> | executable-name
, если в контексте клона IBM® PC-DOS®.