Следующее может использоваться непосредственно в вашем коде и проверять нецелочисленный ввод, включая пустые, бесконечные и мнимые значения:
isInteger = ~isempty(num_dice) ...
&& isnumeric(num_dice) ...
&& isreal(num_dice) ...
&& isfinite(num_dice) ...
&& (num_dice == fix(num_dice));
Вышеуказанное будет работать корректно только для скалярного ввода. Чтобы проверить, содержит ли многомерный массив только целые числа, вы можете использовать:
isInteger = ~isempty(x) ...
&& isnumeric(x) ...
&& isreal(x) ...
&& all(isfinite(x)) ...
&& all(x == fix(x))
EDIT
Эти тесты для любых целочисленных значений. Чтобы ограничить действительные значения положительными целыми числами, добавьте num_dice > 0
, как в @ ответ MajorApus .
Вы можете использовать вышеупомянутое, чтобы заставить пользователя вводить целое число, выполняя циклы, пока они не уступят вашим требованиям:
while ~(~isempty(num_dice) ...
&& isnumeric(num_dice) ...
&& isreal(num_dice) ...
&& isfinite(num_dice) ...
&& (num_dice == fix(num_dice)) ...
&& (num_dice > 0))
num_dice = input('Enter the number of dice to roll: ');
end