Ограничьте ввод с клавиатуры определенными символами с помощью цикла while и get () - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь ограничить область возможных входных данных на фигуре 'y' и 'n' в цикле while в Matlab.Однако приведенный ниже код не работает так, как должен (по крайней мере, на мой взгляд).

answ = get(fig, 'CurrentCharacter');
while answ ~= 'n' & answ ~= 'y'
  answ = get(fig, 'CurrentCharacter');
end

Как мне добиться желаемого поведения?Кажется, только первый ввод перехватывается get.Когда я отображаю переменную, цикл просто продолжается вечно, даже если символ ответа явно равен 'n' или 'y' и не изменяется при последующих нажатиях клавиш.Кроме того, иногда фигура исчезает, и ввод начинает захватываться терминалом.Кажется, выполнение кода в командном окне приводит к желаемому поведению:

>> answ

answ = n

>> answ ~= 'n' & answ ~= 'y'

ans = 0

answ = x

>> answ ~= 'n' & answ ~= 'y'

ans = 1

1 Ответ

0 голосов
/ 16 мая 2018

Вы не должны использовать цикл для прослушивания символов, но используйте цифру Обратные вызовы ! Например:

fig = figure('KeyPressFcn',@Key_Down);

function Key_Down(src,event)
    switch event.Character
        case 'y'
            disp('y')
        case 'n'
            disp('n')
    end
end

KeyPressFcn - это событие, возникающее при нажатии клавиши, и Matlab вызовет вашу функцию Key_Down. В структуре event вы найдете ключ, модификатор (Shift, CTRL и т. Д.) И другую информацию.

...