我正在Matlab中编写一个函数,提示用户使用wavread
函数选择要读入的乐器(.wav文件)。
我正在尝试包含某种错误处理/处理来自用户的错误输入。
到目前为止,我的功能看起来像这样:
prompt = 'Select Instrument, Piano: [P], Fork: [F], Violin: [V], Gameboy: [G]';
str = input(prompt,'s');
if isempty(str)
str = 't';
end
while(str ~= 'P') || (str ~= 'F') || (str ~= 'V') || (str ~= 'G')
prompt = 'Invalid Selection! Choose, Piano: [P], Fork: [F], Violin: [V], Gameboy: [G]';
str = input(prompt,'s');
if isempty(str)
str = 't';
elseif (str == 'P') || (str == 'F') || (str == 'V') || (str == 'G')
break
end
end
如果在while循环期间出现提示,则会成功提示用户并读取.wav
,但如果用户按下P
,F
,V
或{ {1}}在第一个提示符处,仍然使用了while循环,并且仍然显示G
...
我不确定我应该如何实现这个......
答案 0 :(得分:3)
那是因为你的逻辑错了
(str ~= 'P') || (str ~= 'F') || (str ~= 'V') || (str ~= 'G')
总是正确的,因为str总是与P,F,V或G不同。它不能与你所要求的全部相同。
应该是
str ~= 'P' && str ~= 'F' && str ~= 'V' && str ~= 'G'
或
~(str == 'P' || str == 'F' || str == 'V' || str == 'G')
或在理智的matlab中
~any('PFVG' == str)
答案 1 :(得分:1)
如何使用strcmp
?
str = input(prompt,'s');
if isempty(str)
str = 't';
end
while ~any(strcmp(str,{'P' 'F' 'V' 'G'})) %|| (str ~= 'F') || (str ~= 'V') || (str ~= 'G')
prompt = 'Invalid Selection! Choose, Piano: [P], Fork: [F], Violin: [V], Gameboy: [G]';
str = input(prompt,'s');
if isempty(str)
str = 't';
elseif (str == 'P') || (str == 'F') || (str == 'V') || (str == 'G')
break
end
end