我正在提示用户输入正确答案,例如:
/> 13 + 7 ?
是否可以使这个输出在2秒后消失?
..感谢'任何建议
答案 0 :(得分:3)
我想要结合一些事情,我想:
1)如何删除一行
2)你如何等待输入一段时间然后放弃等待(即计时器)
以下代码将执行您想要的操作(还有其他方法可以完成上述任何操作,但下面显示了上述每个任务的一种方法):
use strict; use warnings;
use IO::Select;
my $stdin = IO::Select->new();
$stdin->add(\*STDIN);
# always flush
$| = 1;
my $question = "/> 7 + 3 ? ";
print $question;
if ($stdin->can_read(2)) {
print "you entered: " . <STDIN>;
} else {
print "\010" x length($question);
print " " x length($question);
print "too late\n";
}
答案 1 :(得分:2)
在select
上使用STDIN
查看2秒内是否有任何输入。如果不是,请使用回车符(\r
)或多个退格键(\b
)覆盖输出。
概念证明:
$| = 1; # needed because print calls don't always use a newline
$i = int(rand() * 10);
$j = int(rand() * 10);
$k = $i + $j;
print "What is $i + $j ? ";
$rin = '';
vec($rin, fileno(STDIN), 1) = 1;
$n = select $rout=$rin, undef, undef, 2.0;
if ($n) {
$answer = <STDIN>;
if ($answer == $k) {
print "You are right.\n";
} else {
print "You are wrong. $i + $j is $k\n";
}
} else {
print "\b \b" x 15;
print "\n\n";
print "Time's up!\n";
sleep 1;
}
当您准备好使用更高级的解决方案时,您可以查看Term::ReadKey
(因此您无需在输入答案后点击 Enter )或类似的内容Curses
可以更好地控制对终端上任意位置的写入。