4

MATLABの次のtryandcatchコードに問題があります。

fonster='';
while ~(~isempty(fonster) && isnumeric(fonster) && isreal(fonster) && isfinite(fonster) && (fonster == fix(fonster)) && (fonster > 0))
    try
        fonster = input('Välj ett heltal till fönsterplatsen du vill lägga grafen i: ');
    catch
        disp('Du måste mata in ett heltal');
    end
end

無効な入力を文字列として入力関数に入力すると、コードのcatch部分が入力されていないように見えます。代わりに、入力を最初からやり直して、出力メッセージを無視します。奇妙な部分は、コード内の別の場所にあるキャッチ内でdispを使用していることですが、今回は機能しません。

いくつかの実行例を次に示します。

tryおよびcatchステートメントなしで入力します。

Välj den fönsterplats du vill lägga grafen i: o
Error using input
Undefined function or variable 'o'.

Error in skapaPlot (line 11)
    fonster = input('Välj den fönsterplats du vill lägga grafen i:
    ');

Error in mainMeny (line 17)
            plot_handles = skapaPlot(plot_handles);

Välj den fönsterplats du vill lägga grafen i:

試してみてキャッチ:

Välj ett heltal till fönsterplatsen du vill lägga grafen i: f
Välj ett heltal till fönsterplatsen du vill lägga grafen i: d
Välj ett heltal till fönsterplatsen du vill lägga grafen i: s
Välj ett heltal till fönsterplatsen du vill lägga grafen i: 

なぜ表示部分が表示されないのですか?!

4

1 に答える 1

10

Matlabの入力式エバリュエーターは、入力中に発生した例外を処理し、プロンプトをすぐに再表示します。例外はクリアされます。したがって、catchハンドラーが例外を確認することはありません。自分で管理したい場合は、代わりにinput(...、's')を使用して、生の文字列を返します。次に、「eval()」を使用して評価を実行できます。

try
    inputstring = input('Välj ett heltal till fönsterplatsen du vill lägga grafen i: ', 's');
    fonster = eval(inputstring);
catch
    disp('Du måste mata in ett heltal');
end
于 2012-07-09T09:22:50.847 に答える