我有一个函数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保持打开输入,我可以阻止它的唯一方法是关闭它(无限循环)。我怎样才能实现我的目标?
提前致谢
答案 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