Почему Lua не переоценивает io.read ("* n")? - PullRequest
0 голосов
/ 04 октября 2018

У меня есть некоторый код

::redo::
io.write("input: ")
var = io.read("*n")
if var then
    if var > 5 and var < 10 then io.write("yes\n") goto redo
    else io.write("invalid\n") goto redo end
else io.write("invalid\n") goto redo end

, который должен проверять числовое входное значение и возвращать его, если он находится в определенном диапазоне.Если это не числовое значение, он должен «повторить» сценарий и снова запросить ввод.Проблема заключается в том, что всякий раз, когда он принимает ввод, который не является числом, он повторяет io.write("input: ") и io.write("invalid\n"), что означает, что он пропускает строку var = io.read("*n").Есть ли какой-то особый смысл или причудливость в io.read("*n"), которая мешает ему переоценить?Код, кажется, работает, если заменить на io.read()

1 Ответ

0 голосов
/ 04 октября 2018

Когда вы звоните io.read('*n') и он не находит номер, он не использует ввод, и любые вызовы io.read('*n') будут читать один и тот же ввод снова и снова.Вам нужно съесть ввод и отменить его, позвонив io.read('*l').Это позволит вам читать новый ввод с помощью io.read('*n').

. Другой способ - прочитать строку с io.read('*l'), извлечь из нее число с помощью string.match и преобразовать его в число с помощью tonumber,Тогда вам не нужно читать один и тот же ввод дважды, но вам нужно будет решить, какие типы числовых обозначений вы хотите использовать.(io.read('*n') принимает различные типы чисел, включая шестнадцатеричное и научное обозначение.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...