簡體   English   中英

Perl中簡單算法的麻煩

[英]Trouble with simple arithmetic in perl

目前,我在執行下面代碼片段中所示的簡單算術時遇到麻煩,我認為問題可能是由於范圍引起的,但是我是一個新手,並且不能完全理解我可能會遇到的范圍問題,任何幫助將不勝感激。 謝謝。

use POSIX;
use integer;

my $firstnumber1 = 0;
my $secondnumber1 = 0;
my $digitcount = 0;

my $string = "ADD(5,4);";
if($string =~ /^ADD/)
{

      foreach my $char (split //, $string)
      {
          print "char = $char\n";
          if((isdigit($char)) && ($digitcount == 0))
          {

               $firstnumber1 = int($char);
               print "firstnumber = $firstnumber1\n";

          }
          if((isdigit($char)) && ($digitcount == 1))
          {
               $secondnumber1 = int($char);
               print "secondnumber = $secondnumber1\n";
          }
          $digitcount++;
          my $finalnumber1 = $firstnumber1 + $secondnumber1
      }


}
print "$finalnumber1 = $firstnumber1 + $secondnumber1";

您正在使用一種尚不完全了解的語言來編寫解析器。 解析器很難 ,所以我認為您應該從其他角度開始

在編寫的每個Perl程序的頂部,您必須始終 use strict use warnings 'all'use warnings 'all' 那會提醒您頂部finalnumber1沒有被聲明。 並且所有聲明都應盡可能 -通常是在首次定義的地方進行

不清楚您打算在第二個數字之后發生什么! 不要使用$firstnumber1等過長的標識符,如果發現使用的標識符以數字結尾,則表明您需要一個數組

這是我對您嘗試做的事情的看法

use strict;
use warnings 'all';
use v5.10;

my ($n1, $n2);
my $nc = 0;
my $total = 0;

my $string = 'ADD(5,4);';

if ( $string =~ /^ADD/ ) {

    for my $char ( split //, $string ) {

        say "char = $char";

        if ( $char =~ /[0-9]/ ) {

            if ( $nc == 0 ) {
                $n1 = $char;
                say "firstnumber = $n1";
            }
            else {
                $n2 = $char;
                say "secondnumber = $n2";
            }

            $total += $char;
            ++$nc;
        }
    }
}

say "$total = $n1 + $n2";

輸出

char = A
char = D
char = D
char = (
char = 5
firstnumber = 5
char = ,
char = 4
secondnumber = 4
char = )
char = ;
9 = 5 + 4

看起來$digitCount增量應該在兩個if塊內。 現在,您將在處理A然后在D上依次增加它,依此類推,所以到5 $digitCount將為4,這$digitCount條件永遠不會為真。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM