else语句不执行,因为if始终为true

时间:2020-02-11 23:59:29

标签: linux perl

要让上下文说明我正在做的事情是作业:生成一个报告,其中包含数据文件中每个作业的最低,最高和平均分数。作业的名称位于第3列。您的报告应采用表格格式,如以下示例所示;输入是具有5列的csv文件:“学生”,“类别”,“作业”,“得分”和“可能得分”。

这是我的代码:

#!/usr/bin/perl
@NAMES[0]="first";
my $COUNT=0;
@AVERAGE[0]=0;
@HIGH[0]=0;
@LOW[0]=0;
my $VAL=0;
@SUM[0]=0;
@COUNT_SUM[0]=0;
while(<>){
    chomp;
    @array=split(/,/,$_);

    my $name=@array[2];
    my $score=$array[3];

    if($name=="Assignment"){
        $VAL=1;
    }
    else{ 
        for($i=0;$i<=$COUNT;$i++){
            if($name==$NAMES[$i]){
                $VAL=$i;
                print "it runs\n";
                print $name."\n";
                print $NAMES[$i]."\n";
                $SUM[$i]=$SUM[$i]+$score;
                $COUNT_SUM[$i]++;
                if($name>$HIGH[$i]){
                    $HIGH[$i]=$score;}
                if($name<$LOW[$i]){
                    $LOW[$i]=$score;}
                }
            }

            if($VAL == 0){
                $COUNT++;
                $NAMES[$COUNT] = $name;
                $SUM[$COUNT]=$SUM[$COUNT]+$score;
                $COUNT_SUM[$COUNT]++;
                $LOW[$i]=$score;
                $HIGH[$i]=$score;
            }
            $VAL=0;
        }
        for ($i=1;$i<=$COUNT;$i++){
            $AVERAGE[$i]=$SUM[$i]/$COUNT_SUM[$i];
        }

        print "Name"."\t"."Low"."\t"."High"."\t"."Average\n";
        for ($i=1;$i<=$COUNT;$i++){
            print $NAMES[$i]."\t".$LOW[$i]."\t".$HIGH[$i]."\t".$AVERAGE[$i]."\n"
        }

我已经测试了各种方法来找出问题,因为它仅打印“名称低高平均”字符串,而没有实际信息。不知何故,if语句始终为true,而带有for循环的else永远不会执行,因此$ VAL的值始终等于1,并且永远不会填充数组。

我知道代码可能效率很低,但是我仍然想解决为什么它不起作用。

1 个答案:

答案 0 :(得分:3)

使用eq代替==进行字符串比较。

Equality Operators section in Perl documentation

查看更多参考