MARS имеет системный вызов read-file , который может читать из стандартного ввода (fd = 0), как POSIX read(fd, buf, max_len)
. $ v0 = 14 / syscall.
Это может прочитать более двух новых строк, но ваш код, который анализирует ввод, может прекратить зацикливание, где вы хотите.
Или вы можете просто использовать строку чтения Системный вызов fgets ($v0=8
) до тех пор, пока пользователь не нажмет клавишу возврата, возвращает пустую строку, в результате чего первый байт ввода будет '\n'
.
Кроме этого; Я не думаю, что ограниченный API syscall для игрушек, предоставляемый MARS, может запрашивать, доступен ли символ, поэтому ваш выбор блокируется до тех пор, пока пользователь не нажмет вторую новую строку, или не оставит его непрочитанным.
В действительности Операционные системы, обычно есть способ сделать неблокирующий запрос, чтобы выяснить, ожидает ли какой-либо ввод для чтения. (Например, POSIX select()
или fcntl
для установки дескриптора файла на O_NONBLOCK, поэтому при чтении будет установлен errno=EAGAIN
без блокировки, если нет готовых вводимых данных, и необработанный или готовый TTY, позволяющий читать символы до возвращения пользователя). Но системные вызовы MARS / SPIM подходят только для программ, которые не имеют сложных пользовательских интерфейсов.