Perl Если с "+", "-", "*", "/" - PullRequest
       0

Perl Если с "+", "-", "*", "/"

0 голосов
/ 17 февраля 2020

У меня есть этот код:

print ("First Value: ");
$valor1 = <STDIN>;
print ("Second Value: ");
$valor2 = <STDIN>;
print ("Operator: ");
$op = <STDIN>;
if ($op == "+")
{
    $total = $valor1 + $valor2;
    print ($total);
}

elsif ($op == "-")
{
    $total = $valor1 - $valor2;
    print ($total);
}

elsif ($op== "*")
{
    $total = $valor1 * $valor2;
    print ($total);
}

elsif ($op == "/")
{
    $total = $valor1 / $valor2;
    print ($total);
}

Он все правильно читает, но когда он входит в условие, если пользователь вводит "-", "/" или "*", он всегда вводит первое условие и делает сумму, и я хотел выяснить, почему.

Ответы [ 2 ]

6 голосов
/ 17 февраля 2020

Всегда use strict; и use warnings;.

Это даст вам предупреждение:

Аргумент "+" не цифра c в цифре c eq (==) в test.pl строка 9, строка 3.

И именно поэтому вы получаете поведение, которого вы не ожидаете.

Вы должны использовать eq (и учитывать символ новой строки во входных данных).

0 голосов
/ 17 февраля 2020

Пожалуйста, посмотрите следующий фрагмент кода, который реализует несколько математических функций.

Примечание: сравнение == для чисел, вы должны использовать eq для op, так как это строка

use strict;
use warnings;
use feature 'say';

my($a,$b,$op,$total);

$a  = get_input('First Value: ');
$b  = get_input('Second Value: ');
$op = get_input('Operator: ');

$total = $a + $b  if $op eq '+';
$total = $a - $b  if $op eq '-';
$total = $a * $b  if $op eq '*';
$total = $a / $b  if $op eq '/';
$total = $a ** $b if $op eq '**';

say "$a $op $b = $total";

sub get_input {
    my $msg = shift;

    print $msg;
    my $ret = <STDIN>;
    chomp $ret;

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