Matlab用户输入/循环

时间:2013-04-10 12:33:30

标签: matlab while-loop

我正在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,但如果用户按下PFV或{ {1}}在第一个提示符处,仍然使用了while循环,并且仍然显示G ...

我不确定我应该如何实现这个......

2 个答案:

答案 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