2015-02-07 57 views
0

我正在爲一個類製作一個簡單的算命器程序。我想先讓用戶在四位數字之間進行選擇,比如在紙張算命器(cootie catcher,就像它)。測試陣列元素的數字用戶輸入

我創建了一個數組@number_choices =(1,2,3,4);我想確保用戶輸入等於數組中的一個數字。這裏是我到目前爲止,這是不是在所有工作(當我運行該程序,它打印錯誤消息無論輸入怎樣的數字,除了有時2或1):

my $number_chosen = <STDIN>; 
    chomp ($number_chosen); 

    my $num; 
    my $found = 0; 

    while ($found == 0) 
    { 
     foreach $num (@number_choices) 
     { 
       if ($number_chosen == $num) 
       { 
        $found = 1; 
        last; 
       } 

       else 
       { 
        print "I'm sorry, that number is not valid. Please pick a number: " . join(', ', @number_choices) . "\n"; 
        $number_chosen = <STDIN>; 
        chomp ($number_chosen); 
       } 
      } 
    } 
+0

什麼是錯誤消息? – Lizz 2015-02-07 22:22:53

回答

0

你有一個邏輯錯誤。你選擇一個數字,但是通過數組的每一個循環它都會讓你選擇另一個循環,所以如果在第二個循環中輸入數字2,它將是正確的,無論你的第一個輸入是什麼,第三個循環的數字是3

你應該把錯誤信息出foreach循環並索要while內的數字。除此之外,last只會離開最近的循環,所以您需要使用標籤走出while。類似於以下髒解決方案:

my @number_choices = (1, 2, 3, 4); 

my $num; 
my $found = 0; 

LOOP: 
while ($found == 0) 
{ 
    $number_chosen = <STDIN>; 
    chomp ($number_chosen); 
    foreach $num (@number_choices) 
    { 
      if ($number_chosen == $num) 
      { 
       $found = 1; 
       last LOOP; 
      } 

     } 
     print "I'm sorry, that number is not valid. Please pick a number: " . join(', ', @number_choices) . "\n"; 
} 
+0

非常感謝@Birei,我在包裝邏輯上遇到了麻煩。我最終做了類似於你的建議。 – twistylittlepassages 2015-02-07 22:46:24