首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >针对数组元素测试数字用户输入

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

Stack Overflow用户
提问于 2015-02-07 22:17:04
回答 1查看 94关注 0票数 0

我在为一个班做一个简单的算命程序。首先,我想让用户在四个数字之间进行选择,就像在纸面算命员( catcher )上那样。

我创建了一个数组,@number_choices =( 1,2,3,4 );我希望确保用户输入与数组中的一个数字相等。以下是我到目前为止完全无法工作的内容(当我运行该程序时,它会打印错误消息,不管输入的是哪个数字,有时除了2或1):

代码语言:javascript
复制
    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);  
               }  
          }  
     }  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-07 22:28:38

你有一个逻辑错误。您选择了一个数字,但是对于数组中的每一个循环,它都会让您选择另一个数字,所以如果在第二个循环中输入number 2,那么不管您的第一个输入是什么,第三个循环输入的数字3都是正确的。

您应该将错误消息从foreach循环中删除,并在while中请求一个数字。除此之外,last只会离开最近的循环,所以您需要使用标签才能退出while。类似于以下脏解决方案的内容:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28388107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档