Попробуйте читать построчно как строку и конвертировать строку в число, используя tonumber ()
repeat
print("Input number!")
num = tonumber(io.read())
print('Would you like do to this again? (y/n)')
again = io.read()
until again == 'n'
Во время отладки я вижу, что второй io.read использует буфер, запущенный сразу после окончания вашего числа.
Ваш код с еще несколькими отпечатками
repeat
print("Input number!")
-- num = tonumber(io.read())
num = io.read('*n')
print('you entered-> ' .. tostring(num))
print('Would you like do to this again? (y/n)')
again = io.read()
print('your choise from (y/n)-> ' .. again)
until again == 'n'
вывод
Input number!
234
you entered-> 234
Would you like do to this again? (y/n)
your choise from (y/n)->
Input number!
234y
you entered-> 234
Would you like do to this again? (y/n)
your choise from (y/n)-> y
Input number!
234234n
you entered-> 234234
Would you like do to this again? (y/n)
your choise from (y/n)-> n
Это описание с Программирование на Lua: 21,1
Вызов io.read ("* number") читает число из текущего входного файла.Это единственный случай, когда read возвращает число вместо строки.Когда вам нужно прочитать много чисел из файла, отсутствие промежуточных строк может значительно улучшить производительность.Опция * number пропускает все пробелы перед числом и принимает числовые форматы, такие как -3, +5.2, 1000 и -3.4e-23.Если он не может найти число в текущей позиции файла (из-за неправильного формата или конца файла), он возвращает ноль.
Пожалуйста, извинитесь за плохое описание.