如果您使用的是tic、toc和var=input('prompt'),那么如果回答时间过长,toc是否有办法中断用户输入?

5个视图(过去30天)
克里斯蒂娜辽阔
克里斯蒂娜辽阔 2021年7月28日
嗨,我正在做一个项目,我必须给人们的数学问题答案计时。目前,我正在研究一个问题,他们最多有20秒的时间来回答。有没有办法让Matlab中断并告诉用户他们花了太长时间才回答?所以,如果他们在20秒内没有回答,就会弹出一条线告诉他们他们花了太长时间?
这是我到目前为止为它编写的代码,但它不会告诉用户在输入答案之前他们花了太长时间。
关闭全部的; 清楚的全部的;clc;
流(说明:在头脑中完成以下数学题,然后在数字键盘上键入答案。您最多有1分钟的时间回答每个问题。请按任意按钮继续。\n\n
%的停顿;
ECorAns = 76 * 10;%正确答案
tstart =抽搐;
茶=抽搐;
流(“开始茶”
虽然总有机碳(茶)<20
easAns =输入('76\n x10\n'
如果toc(茶)> = 20
茶糖=总有机碳(茶糖)
easAns = 0;
流(“没有时间了”);
elseifeasAns = = ECorAns
流(“\ n正确!好工作!\ n”);
茶糖=总有机碳(茶糖)
其他的
流(“不正确的”);
茶糖=总有机碳(茶糖)
结束
结束
往往= toc (tstart)
流(“\ n \ n结束”
我认为我设置了它,所以代码将记住挑逗一旦代码已经完全运行,所以我可以记录数据。
谢谢你!

接受的答案

卡姆萨尔茨伯格
卡姆萨尔茨伯格 2021年7月28日
你好,克里斯蒂娜,
你可以试着用 inputdlg 询问问题,而不是将其保留在命令窗口中。您可以获取对话框的句柄,如果它们花费的时间太长,可以将其关闭。
为了进行更多的定制,您可以创建自己的图形或ui图形弹出框来询问问题。
凸轮
2的评论
卡姆萨尔茨伯格
卡姆萨尔茨伯格 2021年7月30日
嗯,我用inputdlg做了一个小测试,可以做一个简单的小测验:
answers=inputdlg([“1+1=?”、“2+2=?”]、“数学问题”、1、[“”、“”)、结构(“窗口样式”、“模式”、“调整大小”、“打开”))
不幸的是,它会自动阻塞,直到窗口关闭。因此,您需要自己制作 对话 数字 ,或 uifigure 窗口。这将给你图形的句柄,你可以关闭它或改变它的状态,如果他们花了太长时间,基于一个tic-toc如果你想,但a 计时器 会更有意义。
你需要添加相同的文本,编辑和按钮 uicontrol (用于对话框或图形)或 uilabel uieditfield uibutton (对于uifigure)来模拟对话框。然后向按钮添加一个回调,以检索答案并检查它们,或者将它们返回到某个地方供您处理。
这要复杂得多,但所有的GUI创建都是。 应用程序设计师 可能会帮助您更快地完成这一点,因为它为您提供了代码框架,并允许拖放组件。
凸轮

登录评论。

更多的答案(2)

多田
多田 2021年7月28日
编辑:多田 2021年7月28日
这是可能的,但不用toc。
问题是,一旦代码到达输入函数,它就会冻结在该行中,等待键盘交互。
下一行代码仅在返回输入后运行,因此根本无法到达toc。
你可以使用一个计时器,然后用JAVA程序在“键盘”上键入回车键
timeout =计时器();
超时。ExecutionMode =“singleShot”
超时。TimerFcn = @doTimeout;
超时。StartDelay = 10;
timeout.start();
s=输入('键入某物:'“年代”);
作用doTimeout(咯,ea)
进口java.awt.Robot
进口java.awt.event.KeyEvent
机器人=机器人;
robot.keyPress (KeyEvent.VK_ENTER);
robot.keyRelease (KeyEvent.VK_ENTER);
结束
这个小示例展示了如何使用我提到的技巧在10秒后强制停止输入函数。
这可能会适得其反,但如果用户开始打字,然后计时器火灾,并停止用户在中间。

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始打猎吧!