Есть ли способ установить переменные, равные друг другу внутри оператора if? - PullRequest
0 голосов
/ 08 апреля 2019

Я работаю над домашним заданием, которое дает мне задачу взять четыре введенных пользователем числа и сравнить их с выводом наибольшего и наименьшего. Я не могу использовать циклы, поэтому я использую операторы if / else / elsif, но получаю сообщение об ошибке. У меня это до сих пор, и я не уверен, что я делаю неправильно.

[хижина]

my $small;
my $big;

print "\nEnter first number: ";
chomp (my $one = <>);

print "\nEnter second number: ";
chomp (my $two = <>);

print "\nEnter third number: ";
chomp (my $three = <>);

print "\nEnter fourth number: ";
chomp (my $four = <>);

if ($one >= $two) {
    $one = $big;
    $two = $small;
}
else {
    $one = $small;
    $two = $big;
}

if ($three >= $big) {
    $three = $big;
}
elsif ($three <= $small) {
    $three = $small;
}

if ($four >= $big) {
    $four = $big;
}
elsif ($four <= $small) {
    $four = $small;
}

print "LRG: $big\n";
print "SML: $small\n";

В идеале вы вводите четыре числа, и оно выводит наибольшее и наименьшее. Вместо этого я получаю "Использование неинициализированного значения $ big в числовом ge (> =) в [имя файла] .pl строка 29, <> строка 4". в строках 29 и 36. Я тоже получаю "Использование инициализированного значения $ small в конкатенации (.) Или строковой строке 44, <> строка 4."

1 Ответ

2 голосов
/ 08 апреля 2019

Perl работает так же, как почти любой другой язык программирования.В операторе присваивания значение в правой части оператора присваивается переменной в левой части оператора.Таким образом, в таком выражении, как:

$one = $big;

Вы присваиваете значение $big переменной $one.Как уже указывалось в комментарии, это неправильный путь, и вы действительно хотели:

$big = $one;

Есть несколько более простых подходов, которые вы можете использовать.Во-первых, вы можете отсортировать список чисел, а затем взять первый и последний элементы из списка:

my @sorted = sort { $a <=> $b } ($one, $two, $three, $four);
my ($small, $big) = @sorted[0, $#sorted];

Или вы можете использовать функции min() и max() из модуля Список:: Util .

use List::Util qw[min max];

my $small = min($one, $two, $three, $four);
my $big   = max($one, $two, $three, $four);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...