1

如何在 MatLab 中捕获用户在输入中输入字母和其他不是数字的内容时发生的错误:

width = input('Enter a width: ');

我已经玩了一段时间的try/catch命令:

width = 0;
message = '';

% Prompting.
while strcmp(message,'Invalid.') || width < 1 || width ~= int32(width)

  try
     disp(message)
     width = input('Frame width: ');
  catch error
     message = 'Invalid.';
  end

end

但是没有运气(以上不起作用)。如图所示,我想要一个简单的消息,例如“框架宽度:”,以便用户第一次输入他的选择。但是,如果发现错误,我希望他的消息是“无效的。再试一次:”每次发生错误时 fx。

我也尝试过,error()但我不知道如何正确放置。由于error()不接受input错误发生的命令作为参数,它必须以另一种方式检测它,我无法理解。

任何帮助,将不胜感激。

4

2 回答 2

4
width = input('Frame width: ');
while(~isInt(width))
    width = input('Invalid. Try again: ');
end

并且您必须在某处具有以下功能(或它的另一个实现)

function retval = isInt(val)
    retval = isscalar(val) && isnumeric(val) && isreal(val) && isfinite(val) && (val == fix(val));
end
于 2012-06-20T23:13:48.307 回答
2
answer = input('Frame width: ', 's');
[width, status] = str2num(answer);
while ~status || ~isscalar(width) || width ~= floor(width)
  answer = input('Invalid. Try again: ', 's');
  [width, status] = str2num(answer);
end
disp(width);

status如果转换失败,则为 0。如果没有isscalar测试,也将接受类似 [1 2; 3 4] 的输入。最后一个测试确保宽度必须是整数。)

于 2012-06-20T23:16:23.657 回答