有条件的陈述给出看似错误的答案:我错过了什么

时间:2011-04-06 01:31:06

标签: perl

所以我必须在Perl中创建一个简单的计算器来维护累加器并执行简单的操作。累加器从0开始,然后根据我收到的结果进行更改。目前我只是想加入工作。当我检查以确保操作员输入+出错。例如:

累加器:0
接线员:放在这里的任何东西都会导致额包括这句话。
操作数:4

累加器:4

它捕获数字但没有别的。我尝试过使用grep和运算符列表。我已经用尽了所有的想法。这是我的代码(Fyi第一篇文章,所以帮助我解决任何noob错误):

my $running = 1;
my $accum = "0";
my $operator;
my $operand;

print("Welcome to the simple, command line calculator.\n");
print("To terminate, press Control-C.\n\n");

while ($running){

    print("\nAccumulator: ".$accum."\n");
    print("Operator: ");
    $operator = <STDIN>;
    if ($operator == "+"){
            print("Operand: ");
            operand = <STDIN>;
            $accum += $operand;
    }
    else{
        print("Invalid operator: ".$operator."\n");
    }
}

2 个答案:

答案 0 :(得分:13)

除非您使用-l选项,否则Perl不会从输入中删除结尾换行符,因此您要将"+""+\n"进行比较。通常你想做像chomp($operator);这样的事情。

也就是说,真正的问题是==进行数字比较,"+""+\n"在数值上下文中评估为0。 (使用-w,你应该总是这样做,会警告你。)使用eq运算符进行字符串比较。

答案 1 :(得分:3)

==比较数字,而不是字符串。如果比较字符串,字符串将转换为数字;对于非数字字符串,这意味着它们变为0。因此$operator == "+"变为0 == 0

对于字符串,请改用eq。另外,请记住<STDIN>将保留换行符;确保chomp $operator也是如此。