针对数组元素测试数字用户输入

时间:2015-02-07 22:17:05

标签: arrays perl input

我正在为一堂课做一个简单的算命先生计划。我想首先让用户在四个数字之间进行选择,比如纸质算命先生(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);  
               }  
          }  
     }  

1 个答案:

答案 0 :(得分: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";  
 }