我有一个像这样的脚本:
i = 1;
while i <10000
a = input('enter a ');
c(i) = a;
i = i + 1;
end
我试图将“ a”保存在“ c”中,大约每秒一次,无论用户输入该值需要花费多长时间或循环中发生的任何其他情况。例如,假设用户输入3表示“ a”等待2秒钟,然后输入6表示“ a”然后等待3秒钟,然后输入12表示一段时间后什么都没有,那么“ c”看起来像这样:
c = 3 3 6 6 6 12 12 12 12 12...
现在,“ c”看起来像这样:
c = 3 6 12...
这不是我想要的。有什么建议?它不必一秒钟,但我想要连续输出。
最佳答案
您的问题很有趣,但没有很好地说明。我假设以下内容:
每个输入应立即附加到c
,并每秒重复一次附加,直到输入新值,这将重置时间计数。从您的问题尚不清楚,您是否希望将新输入的初始固定“提交”设置为c
。
您希望根据对已删除问题的评论自动显示更新的c
。您应该先从问题中提出。
然后,您可以使用timer
对象,当输入每个新的输入值时,该对象将停止并重新启动。计时器配置为每秒唤醒一次。唤醒时,它将最新的输入值a
附加到向量c
并显示。当不再需要计时器时,应注意停止和删除计时器。此外,
我正在考虑将空输入作为退出信号;也就是说,空输入表示即使迭代没有用完,用户也希望完成。使用Ctrl-C中止输入是不可行的,因为计时器将继续运行。我不知道如何拦截Ctrl-C。
我正在从输入函数input
中删除提示字符串,因为它会干扰自动显示更新的c
向量。
用户输入阻止程序执行。如果要在计时器正在更新时使用c
进行其他操作,请将其包含在其'TimerFcn'
函数中。当前,该功能只是'c = [c a]; disp(c)'
(添加并显示输入)。
码
c = []; % initiallize
t = timer('ExecutionMode', 'fixedRate', ... % Work periodically
'Period', 1, ... % Every 1 second...
'TimerFcn', 'c = [c a]; disp(c)', ... % ... append latest value to c
'ErrorFcn', 'delete(t)'); % If user ends with Ctrl-C, delete the timer
i = 1;
done = false;
clc % clear screen
while i < 10 & ~done
a = input(''); % Input new value. No prompt string
stop(t) % stop appending previous a
if isempty(a)
done = true; % no more iterations will not be run
else
start(t) % start timer: appends current a, and repeats every second
end
i = i + 1;
end
delete(t) % stop and delete timer
clear t % remove timer from workspace
例
这是一个带有示例运行的gif文件,其中我以不同的暂停时间输入值
10
,20
,30
,40
,然后以空输入退出。关于matlab - 在Matlab中创建连续输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43701588/