0

这是我的程序,我想让用户逐行输入矩阵并打印 while 矩阵,但我看不到矩阵

用户将键入

1 2 3
4 5 6
7 8 9

像这样

我想让它显示

1 2 3
4 5 6
7 8 9

Perl 程序


$Num = 3;

while($Num > 0 )
{
        $Row = <STDIN>;
        $Row = chomp($Row);
        @Row_array = split(" ",$Row);
        push @P_matrix , @Row_array;
        @Row_array = ();
        $Num = $Num - 1;
}

for($i=0;$i<scalar(@P_matrix);$i++)
{
        for($j=0;$j<scalar(@P_matrix[$i]);$j++)
        {
                printf "$d ",$P_matrix[$i][$j];
        }
        print "\n";
}

我将表达式 => 更改printf "$d ",$P_matrix[$i][$j]; 为打印$P_matrix[$i][$j] ,但仍然无法正常工作。

4

2 回答 2

3

要创建多维数组,您必须使用引用。采用

push @P_matrix, [ @Row_array ];

创建所需的结构。

此外,chomp不返回修改后的字符串。只需使用

chomp $Row;

从 $Row 中删除换行符。此外,chomp如果您split' '.

printf用作%格式化字符,而不是$.

您可以使用它Data::Dumper来检查复杂的数据结构。使用strictwarnings来帮助您避免常见问题。这是我编写程序的方式:

#!/usr/bin/perl
use warnings;
use strict;

use Data::Dumper;

my @p_matrix;

push @p_matrix , [ split ' ' ] while <>;

warn Dumper \@p_matrix;

for my $i (0 .. $#p_matrix)
  {
      for my $j (0 .. $#{ $p_matrix[$i] })
        {
            printf '%d ', $p_matrix[$i][$j];
        }
      print "\n";
  }
于 2013-03-04T09:19:46.053 回答
0

首先,请使用use strict; use warnings;

您的代码中的问题:

  1. 您有一个单维数组,但您正试图像二维数组一样访问它。为了使二维数组将 in 的数组引用推Row_array@P_matrixas [@Row_array]
  2. 在哪里$d定义?声明$dmy $dour $d如果您的意思$d是标量变量。 或者 为了使用%d,使用需要sprintf。请阅读
于 2013-03-04T09:23:07.327 回答