2015-06-08 2 views
4

Я попытался сделать калькулятор хорошим хорошим заданием. Хотя у меня есть проблема с функцией io.read.io.read пропущен Lua

Вот мой код

io.write("let's try making a calculator in LUA!\n\n") 

io.write("First number?\n> ") 
firstNum = io.read("*n") 

io.write("Second number?\n> ") 
secNum = io.read("*n") 

io.write("Operator?\n>") 
op = io.read() 

--rest of code goes here-- 

Это позволяет мне вход firstNum и secNum, но как только он достигает op один он просто завершает работу без ошибок. Вот вывод

➜ lua test.lua 
let's try making a calculator in LUA!! 

First number? 
> 10 
Second number? 
> 20 
Operator? 
>⏎ 

Любая идея, что я делаю неправильно здесь?

+0

Используйте 'FirstNum = ToNumber (io.read())' читать строку с номером –

+2

Или 'firstnum = io.read (" * n "," * l ")'. Простой 'io.read (" * n ")' оставляет конечный пробел во входном буфере (включая новую строку), поэтому 'io.read()' берет оставшуюся часть второй строки ввода, а не третью строку по желанию , – siffiejoe

ответ

3

Причина в том, что номер считывается до тех пор, пока вы не нажмете клавишу ENTER. Символ новой строки все еще находится во входном буфере и затем считывается следующим образом: io.read().

Один из вариантов заключается в том, чтобы читать op, пока оно не будет действительным. Например, чтобы пропустить пробельные символы:

repeat op = io.read() until op:match "%S" 

или читать только один символ пунктуации:

repeat op = io.read() until op:match "%p" 
Смежные вопросы