我创建了一个数组,@ 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 :(得分: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";
}