Confusión al usar la instrucción @ (permite ingresas cadenas de más de un caracter)
jjmontes opened this issue · 2 comments
Sistema: Ubuntu 18.04 LTS
Ejecución: ./ni ./examples/sum.ni
15
12
2
Análisis: El programa SUM.NI suma el ingreso de dos valores de un dígito (según lo que entendí leyendo el código de sum.ni) pero permite que el usuario ingrese números de una longitud mayor.
Bug: La instrucción @ (arroba) de NI dice "Lee un byte, lo convierte a número y lo almacena en la celda apuntada", pero espera que el usuario presione la tecla ENTER para leer el primer byte de la cadena ingresada por el mismo, pudiendo esta ser de varios caracteres. Creo que sería más claro que, cuando se espera el ingreso del usuario, cuando este presiona una tecla, tome el valor de dicha tecla.
Lo que hace @ en realidad es que toma el primer caracter que ingreses, ahí imprime 2 porque pusiste 15 y 12, de 15 el primer caracter es 1 y de 12 el primer caracter es 1, 1+1 = 2.
Es un problema porque en Lua no encuentro la manera de solo leer 1 caracter y que luego se ejecute, no sé si esto es posible. Sin embargo voy a reescribir la descripción de la instrucción @ para que sea mas claro.
Toma encuenta también que ahí toma los caracteres numéricos, sin embargo si revisas la tabla ASCII, el 0 en realidad sería el número 48, el 1 sería 49, es por eso que sum.ni primero toma el input, ejecuta la suma y luego le resta 96 (48+48), para ajustar el resultado, de lo contrario si escribes 1, 2 veces imprimiría 98 (49+49)