制限時間内のキー入力検査
Posted feedbacks - Perl
getc()とalarm()を使って。詳しくは perldoc -f getc perldoc -f alarm を参照のこと。 Dan the Perl Monger
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #!/usr/local/bin/perl
use strict;
use warnings;
sub cbreak{
system "stty cbreak </dev/tty >/dev/tty 2>&1";
}
sub inputcheck{
my ($sec, $str) = @_;
print "INPUT($str)\n";
cbreak;
my $input = getc(); # wait until the 1st key is pressed
eval {
local $SIG{ALRM} = sub { die "alarm\n" };
alarm $sec;
while(my $c = getc()){
last if $c eq "\n";
$input .= $c;
}
alarm 0;
};
cbreak;
$@ and return "TIMEOUT";
$str eq $input ? "OK" : "NG";
}
print inputcheck(2, "dankogai"), "\n";
|


raynstard
#3420()
Rating0/2=0.00
関数 InputCheckerは、以下の仕様を満たしてください。
たとえば、「InputCheker(5, "ABCDEF")」と指定した場合、 出力例はこんな感じです。
1. input(ABCDEF) =>と出力して入力待ちをし、ユーザーが「ABCDEF<ENTER>」を入力したとき、 入力開始から5秒以内ならば「OK」、5秒をこえていれば「TIME OUT」を出力します。 このとき、ユーザーがキーを押下しなければ1. を出力してから たとえ10秒たっていても「TIME OUT」にはならないので注意してください。 時間計測はあくまでユーザーが入力を開始してからです。
このお題はraynstardさんの投稿です。ご協力ありがとうございます。
[ reply ]