在Matlab中循环时的数字数据验证

时间:2015-04-22 03:20:32

标签: matlab validation while-loop

我有一个函数usenum

function TF = usenum(x)

   TF = false;
   if ~isnumeric(x)
       h = msgbox('Input is not numeric');
   elseif (x <= 0)
       h = msgbox('Input must be > 0');
   else
       TF = true;
   end

我在主菜单中收到用户输入:

answer = inputdlg(prompt,dlg_title,num_lines,def);

inputdlg有2个值,可以由{1}和{2}

索引

我想等待用户输入一个值,该值必须是一个数字且大于0.如果他没有,我想输出相应的消息并让他继续输入直到他正确,或关闭inputdlg对话框。

我正在尝试这样的事情:

condition = false;
while ~condition
    answer = inputdlg(prompt,dlg_title,num_lines,def);
    numOfTracks = answer{1};
    bpmRange = answer{2};
    condition = usenum(numOfTracks);
end

我想说,虽然condition = false,即当输入不是数字或不大于0时,继续获取用户输入。一旦用户输入有效数字,该条件应该变为真,并且应该终止while。但是,inputdlg保持打开输入,我可以阻止它的唯一方法是关闭它(无限循环)。我怎样才能实现我的目标?

提前致谢

1 个答案:

答案 0 :(得分:1)

您的循环似乎是正确的。以下测试提供了usenum函数的结果。

>> usenum('')
ans =
     0
>> usenum(-1)
ans =
     0
>> usenum(1)
ans =
     1

就打字而言,usenum函数是正确的,但我相信您的输入总是以字符串形式给出,因为您从对话中获得了用户输入。相反,如果您期望输入字符串,则应尝试重新定义usenum,如下所示。函数str2double将其转换为double,如果是文本,则显示为NaN。这就是isnan检查的目的,以检查它是否是文本。

function TF = usenum(x)
    % Default to false
    TF = false;
    x = str2double(x);
    % Check if digits
    if isnan( x )
        h = msgbox('Input is not numeric');
    elseif (x <= 0)
        h = msgbox('Input must be > 0');
    else
        TF = true;
    end

这是新功能的结果。

>> usenum('a')
ans =
     0
>> usenum('-1')
ans =
     0
>> usenum('1')
ans =
     1