2012-12-23 97 views
2

我是一個perl noob,希望這個問題不是太愚蠢!Perl STDIN在while循環之前執行

我試圖寫一個hang子手風格的遊戲,並得到它所有的工作,除了由於某種原因,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); 
} 
+0

此代碼初始化'$ randword','$ wordlength','@ wordarray','後工作正常@ currentword'和'$ guesses'爲合理值。 – RobEarl

+0

你能告訴我們更多的代碼 - 特別是你打開STDIN的地方嗎? –

回答

0

你STDOUT必須連接到除終端以外的內容,從而導致用於代替線緩衝塊緩衝。嘗試添加

$| = 1; 

(我想讀從STDIN STDOUT造成被刷新,雖然)。

+0

不要完全理解這條線是幹什麼的,但它的工作原理!我會去做更多的閱讀,並找出哈哈,謝謝! – Beemo

+0

關閉當前選定文件句柄(標準輸出)的緩衝。參見[perlvar](http://perldoc.perl.org/perlvar.html)。 – ikegami