2012-07-09 52 views
4

我有以下try和catch代碼MATLAB的一個問題:MATLAB嘗試和catch問題

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: 

用try和catch:

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: 

爲什麼它不顯示DISP部分?!

回答

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