我有一个函数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会继续为输入打开,而阻止它的唯一方法是关闭它(无限循环)。我怎样才能实现自己想要的?
提前致谢
您的循环似乎正确。以下测试提供了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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句