有问题搞清楚是否陈述

时间:2016-02-20 22:35:08

标签: matlab if-statement

我需要弄清楚如何根据用户输入值添加if..elseif..elseif语句来播放不同的声音文件

disp('Press A to play automatic speech program')
disp('Press any other key to manually control what to say')
input('Enter your selection:')

disp('1 - Check out whats new    5 - Irritate me         9 - Game show buzzer')
disp('2 - PacMan death           6 - About time         10 - The price is wrong') 
disp('3 - Buy one get one free   7 - Hard drive crash   11 - Final Countdown')
disp('4 - Hasta la vista         8 - Ms Pacman death    12 - Goodbye')


disp('Press 12 to say goodbye or enter the voice number to play a voice:')

if 1
    [y,Fs] = audioread('check_out_whats_new.wav');
    sound(y,Fs)
end

if 2
    [y,Fs] = audioread('pacman_death.wav');
    sound(y,Fs)
end

1 个答案:

答案 0 :(得分:0)

我建议使用switch语句来执行此操作:

selection = input('Enter your selection:');

switch selection
    case 1
        [y,Fs] = audioread('check_out_whats_new.wav');
        sound(y,Fs)
    case 2
        [y,Fs] = audioread('pacman_death.wav');
        sound(y,Fs)
    % ...
end

要直接回答您的问题,请参阅if-elseif语句:

selection = input('Enter your selection:');

if selection == 1
    [y,Fs] = audioread('check_out_whats_new.wav');
    sound(y,Fs)
elseif selection == 2
    [y,Fs] = audioread('pacman_death.wav');
    sound(y,Fs)
end

解决注释中的问题,这可以通过使用带变量的while语句来实现,以便能够在需要时退出。以下代码执行此操作:

repeat = true;
while repeat
    sel = input('Enter your selection:','s');

    switch str2double(sel)
        case 1
            [y,Fs] = audioread('check_out_whats_new.wav');
            sound(y,Fs);
        case 2
            [y,Fs] = audioread('pacman_death.wav');
            sound(y,Fs);
        % ... more cases
        case 12
            repeat = false;     % exit the while-statement
        otherwise
            disp('no valid input');
    end

end

请注意,我还添加了一些额外的处理。 's'作为input的第二个参数返回用户输入的字符串表示形式。使用str2double,我们可以将字符串转换为数字,然后像以前一样使用开关。对于case 12,您将repeat设置为false,这将在下一次迭代中退出while语句。如果用户输入与案例不匹配,它将再次询问输入。在这种情况下,使用otherwise显示消息。