Язык программирования Форт



         

Глава 5. Ввод и вывод - часть 21


ввод.

Слово EXPECT имеет дополнительные возможности, о которых вы узнаете из гл. 9. В МMSFORTH имеется слово IN$, основанное на слове EXPECT, которое имеет аналогичное действие. Это слово ничего не ожидает из стека и помещает все, что было введено с клавиатуры, в строку со счетчиком, начиная с адреса PAD, до нажатия клавиши , оставляя в стеке адрес PAD. введите IN$, потом , а затем строку символов и снова . Теперь если вы наберете COUNT TYPE, то увидите строку, которую ввели. Адрес PAD был оставлен в стеке словом IN$, слово COUNT кладет в стек длину строки, и TYPE печатает ее. Нестандартные слова IN$ и ему подобные являются основными средствами для ввода текста в программу. Вы многое сделаете с их помощью в главе, посвященной литерным строкам.

До сих пор мы рассматривали только ввод и вывод литер и литерных строк. А как быть с числами? Конечно, можно записать их в стек с клавиатуры, перед тем как будет исполнено какое-либо слово или начнет работать программа. Ну а что делать, если числа нужно вводить во время исполнения программы? Это одна из наиболее слабых сторон стандарта Форт или по крайней мере одно из неудобств для программиста. К счастью, в большинстве версий эта проблема решается с помощью специальных слов. В MMSFORTH такими словами служат #IN и D#IN. Оба они приостанавливают исполнение программы и печатают на экране знак вопроса ?. Вводимые с клавиатуры до нажатия клавиши символы воспринимаются затем как число либо одинарной, либо двойной длины, в зависимости от слова, и помещаются в стек. Если используются недопустимые символы или число имеет недопустимую длину, появляется сообщение "Redo" (повторите), разрешая повторение ввода числа.

Попробуем ввести следующее определение : : TEST ." Какое число " #IN ." Вы ввели " . ;

Если в вашей версии слова #IN или эквивалентного ему нет, потребуется некоторая изобретательность. Прием состоит в том, чтобы ввести литерную строку и затем преобразовать ее в число, используя стандартное слово CONVERT (в некоторых версиях имеется эквивалентное ему слово >BINARY).


Содержание  Назад  Вперед