所以我必须在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");
}
}
答案 0 :(得分:13)
除非您使用-l
选项,否则Perl不会从输入中删除结尾换行符,因此您要将"+"
与"+\n"
进行比较。通常你想做像chomp($operator);
这样的事情。
也就是说,真正的问题是==
进行数字比较,"+"
和"+\n"
在数值上下文中评估为0。 (使用-w
,你应该总是这样做,会警告你。)使用eq
运算符进行字符串比较。
答案 1 :(得分:3)
==
比较数字,而不是字符串。如果比较字符串,字符串将转换为数字;对于非数字字符串,这意味着它们变为0
。因此$operator == "+"
变为0 == 0
。
对于字符串,请改用eq
。另外,请记住<STDIN>
将保留换行符;确保chomp $operator
也是如此。