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 に答える