Оператор else не выполняется, потому что если всегда верно - PullRequest
0 голосов
/ 12 февраля 2020

Чтобы дать представление о том, что я делаю, это задание: создайте отчет, содержащий самые низкие, самые высокие и средние оценки для каждого задания в файле данных. Название задания находится в столбце 3. Ваш отчет должен быть в табличной форме, как показано в примере ниже; Входные данные представляют собой CSV-файл с 5 столбцами: студент, категория, назначение, оценка и возможная оценка.

Вот мой код:

#!/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, а else с for для l oop никогда не выполняется, поэтому значение $ VAL всегда равно 1, и массивы никогда не заполняются.

Я знаю, что код может быть неэффективным, но я все еще хочу выяснить, почему он не работает.

1 Ответ

3 голосов
/ 12 февраля 2020

Используйте eq вместо == для сравнения строк.

См. Дополнительные ссылки в Операторы равенства в Perl документации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...