我正在尝试编写一个脚本来查找3个数字中最大的数字,并通过命令行参数传递它们
sub maximum($) { ($num1) = @_ ; ($num2) = @_ ; ($num2) = @_ ; $max = $num1; if ($num2 > $num1) { $max = $num2; } elsif ($num3 > $max ) { $max = $num3; } } $n1 = $ARGV[0]; chomp($n1); $n2 = $ARGV[1]; chomp($n2); $n3 = $ARGV[2]; chomp($n3); maximum($n1,$n2,$n3);
解决方法
你的最大功能有缺陷:
>如果第一个数字大于第二个数字,则只尝试第三个数字.
>您没有正确检索参数; $num1和$num2都获得第一个,$num3从未设置.
>您永远不会返回$max值.
>您不打印结果.
>您没有范围变量.
>没有理由选择论点.
sub max1 { my $num1 = $_[0]; my $num2 = $_[1]; my $num3 = $_[2]; my $max = $num1; $max = $num2 if $num2 > $max; $max = $num3 if $num3 > $max; return $max; } sub max2 { my $num1 = shift; my $num2 = shift; my $num3 = shift; my $max = $num1; $max = $num2 if $num2 > $max; $max = $num3 if $num3 > $max; return $max; } sub max3 { my ($num1,$num2,$num3) = @_; my $max = $num1; $max = $num2 if $num2 > $max; $max = $num3 if $num3 > $max; return $max; } # Works for any number of arguments. sub max4 { my $max = shift; foreach my $foo (@_) { $max = $foo if $max < $foo; } return $max; } # Works for any number of arguments. use List::Util qw( max ); my $n1 = $ARGV[0]; my $n2 = $ARGV[1]; my $n3 = $ARGV[2]; printf "%d\n",max1($n1,$n3); printf "%d\n",max2($n1,max3($n1,max4($n1,max($n1,$n3); # Even simpler: printf "%d\n",max1 @ARGV; printf "%d\n",max2 @ARGV; printf "%d\n",max3 @ARGV; printf "%d\n",max4 @ARGV; printf "%d\n",max @ARGV;