Escribo un programa simple en Matlab y me pregunto cuál es la mejor manera de garantizar que el valor que ingresa un usuario es un entero adecuado.La mejor manera de obligar a un usuario a ingresar un número entero en Matlab
Actualmente estoy usando esto:
while((num_dice < 1) || isempty(num_dice))
num_dice = input('Enter the number of dice to roll: ');
end
Sin embargo lo que realmente sé que debe haber una mejor manera, porque esto no funciona todo el tiempo. También me gustaría agregar la comprobación de errores a un bloque try catch. Soy nuevo para Matlab, así que cualquier comentario sobre esto sería genial.
Edit2:
try
while(~isinteger(num_dice) || (num_dice < 1))
num_dice = sscanf(input('Enter the number of dice to roll: ', 's'), '%d');
end
while(~isinteger(faces) || (faces < 1))
faces = sscanf(input('Enter the number of faces each die has: ', 's'), '%d');
end
while(~isinteger(rolls) || (rolls < 1))
rolls = sscanf(input('Enter the number of trials: ', 's'), '%d');
end
catch
disp('Invalid number!')
end
Esto parece estar funcionando. ¿Hay algo notablemente incorrecto con esto? EsEntero se define por la respuesta aceptada
La parte 'catch' de tu bloque try-catch nunca será ingresada. Si la prueba 'while' falla, el ciclo simplemente se detiene, es decirno se encuentra ningún error para activar el 'catch'. –
Las excepciones fueron posibles desde la función de entrada. Si ingresas algo como '<' o '-' y tratas de ponerlo en una variable, obtienes un colapso. Lo he arreglado ahora usando sscanf – Tanner
. Puede que le interese la función [ROLL] (http://www.mathworks.com/matlabcentral/fileexchange/27327-a-dice-roller-for-matlab), que es un rodillo de dados para Matlab. – Jonas