我正在用Matlab编写一个简单的程序,我想知道确保用户输入的值是一个正确的整数的最佳方法。
我目前正在使用它:
while((num_dice < 1) || isempty(num_dice))
num_dice = input('Enter the number of dice to roll: ');
end
但是我真的知道必须有更好的方法,因为这不会一直有效。我还想添加错误检查ala try try块。我是Matlab的新手,所以对此的任何输入都会很棒。
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
这似乎有效。这有什么明显的错误吗? isinteger由接受的答案定义
答案 0 :(得分:7)
以下内容可直接在您的代码中使用,并检查非整数输入,包括空值,无限值和虚数值:
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))
修改强>
这些测试任何整数值。要将有效值限制为正整数,请在@MajorApus's answer中添加num_dice > 0
。
您可以使用上述方法强制用户通过循环输入一个整数,直到它们屈服于您的需求:
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
答案 1 :(得分:6)
试试这个,根据需要进行修改。
function answer = isint(n)
if size(n) == [1 1]
answer = isreal(n) && isnumeric(n) && round(n) == n && n >0;
else
answer = false;
end
答案 2 :(得分:2)
检查函数/用户提供的输入属性的一种简单方法是使用validateattributes
函数。我不知道这个功能何时首次推出;当问题第一次被问到时,它可能不存在,但我认为即使这个问题较老,也要提及。
如果要检查用户提供的输入是任何数值数据类型的标量,正数,非零,实数整数,您可以使用try-catch block这样做:
invalidInput = true;
while invalidInput
num_dice = input('Enter the number of dice to roll: ');
try
validateattributes(num_dice, {'numeric'}, ...
{'scalar', 'integer', 'real', 'finite', 'positive'})
invalidInput = false;
catch
disp('Invalid input. Please reenter...');
end
end
如果您正在处理函数输入而不是用户提供的输入,您还可以使用inputParser
类。
答案 3 :(得分:0)
将输入作为字符串并使用sscanf(http://www.mathworks.com/help/techdoc/ref/sscanf.html)确定是否从文本转换了有效整数。
答案 4 :(得分:-1)
试试这个。我认为这更简单:)
% Assume false input at the beginning
checkDice = 0;
% As long as the input is false, stay in the loop
while ~checkDice
% Take the input as a string
strDice = input('Enter the number of dice to roll: ', 's');
% Convert string to number
dice = str2num(strDice);
% Length of dice will be 1 iff input is a single number
if length(dice) ~=1
checkDice = 0;
else
% Search for a positive integer
checkDice = ((dice>=1) && dice == floor(dice));
end
end