我的代码包含以下重复模式:
input
)。我面临的问题:如果用户在出现1 st 提示后多次按下Return / Enter / ⏎(推测)错误地),这些按下的提示被以下提示拦截,导致其余的代码执行。
期望的行为:我想在接受提示之后和下一个提示之前丢弃任意数量的键盘事件,这样如果没有明确的用户与每个提示符的交互,计算就不会进行。
重现问题的代码:
function q34593155()
%% // Init
clc;
import java.awt.Robot; import java.awt.event.*; robot = Robot;
%% // 1st prompt:
disp('--- Some initial info the user should see ---');
[~] = input('\nPress "Return" to start phase 1.\n','s');
disp('Please wait while computation is running...');
%// Here we simulate an additional press:
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
pause(2);
disp('--- results of the 1st part ---');
%% // 2nd prompt:
[~] = input('\nPress "Return" to start phase 2.\n','s');
disp('Please wait while computation is running...');
%// ^ Should only happen after another explicit press on "Enter"');
pause(2);
disp('--- results of the 2nd part ---');
说明:在1 st 提示下按“Enter”一次,或注释掉robot.keyPress
和robot.keyRelease
并按两次(或更多)。
答案 0 :(得分:3)
使用计时器检查在下一个提示的出现与“注册按钮按下”之间经过了一些最小时间,允许确定按压是否可被视为有效。因此,使用以下循环围绕2 nd 提示似乎可以解决此问题:
%% // 2nd prompt:
tic; [~] = input('\nPress "Return" to start phase 2.\n','s');
while toc < 0.002 %// 2ms , value may need adjustment based on the machine.
[~] = input('','s');
end
disp('Please wait while computation is running...');
// rest of code