针对数组元素测试数字用户输入
Testing numeric user input against array elements
我正在为 class 制作一个简单的算命程序。我想首先让用户在四个数字之间进行选择,就像在纸质算命先生(可以说是浣熊捕手)上一样。
我创建了一个数组,@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);
}
}
}
你有一个逻辑错误。你选择了一个数字,但是对于数组的每个循环,它都会让你选择另一个数字,所以如果在第二个循环中你输入数字 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";
}
我正在为 class 制作一个简单的算命程序。我想首先让用户在四个数字之间进行选择,就像在纸质算命先生(可以说是浣熊捕手)上一样。
我创建了一个数组,@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);
}
}
}
你有一个逻辑错误。你选择了一个数字,但是对于数组的每个循环,它都会让你选择另一个数字,所以如果在第二个循环中你输入数字 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";
}