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