在 Matlab 中循环进行数值数据验证

Numeric Data Validation While Loop in Matlab

我有一个函数 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

我想说的是,当条件 = false 时,即当输入不是数字或不大于 0 时,继续获取用户输入。一旦用户输入了一个有效数字,条件就应该变为真,而 while 应该终止。但是,inputdlg 一直打开输入,我可以停止它的唯一方法是关闭它(无限循环)。我怎样才能实现我想要的?

提前致谢

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

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

就输入而言,您的 usenum 函数是正确的,但我相信您的输入始终以字符串形式给出,因为您是从对话中获取用户输入的。相反,如果您需要字符串输入,您应该尝试重新定义 usenum,如下所示。函数 str2double 将其转换为双精度数,如果是文本,它将显示为 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