2

我是一个完全 perl 的菜鸟,希望这个问题不会太愚蠢!

我正在尝试编写一个刽子手风格的游戏并让它全部工作,除了由于某种原因 STDIN 似乎在 while 循环的其余部分之前执行 - 所以我被迫在打印任何内容之前输入我所有的字母猜测出去

while()
{
    foreach $letter (@currentword)
    {
        print "$letter";
    }
    print "\n";
    print "Guess a letter: \n";
    chomp($guess = <STDIN>);
    $guess=lc(substr($guess,0,1));  
    if ( $randword =~ /($guess)+/i )
    {
        print "Correct!\n";
        for ($index=0; $index<$wordlength; $index++)
        {
            if ($wordarray[$index] eq $guess)
            {
                $currentword[$index]=$wordarray[$index];
            }
        }       
    }
    else
    {
        print "Incorrect! try again\n";
    }   
    $guesses -= 1;
    last if $guesses < 1;
    $finalword = join("",@currentword);
    last if ($finalword eq $randword);  
}
4

1 回答 1

0

您的 STDOUT 必须连接到终端以外的其他东西,从而导致使用块缓冲而不是行缓冲。尝试添加

$| = 1;

(不过,我认为从 STDIN 读取会导致 STDOUT 被刷新。)

于 2012-12-23T22:07:59.517 回答