$array无法打印任何内容



这是我的程序,我想让用户逐行输入矩阵并打印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]但还是不行

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

push @P_matrix, [ @Row_array ];

创建所需的结构。

同样,chomp也不返回修改后的字符串。简单地使用

chomp $Row;

从$Row中删除换行符。此外,如果在' '上设置split,则根本不需要chomp

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";
  }

首先请使用use strict; use warnings;

代码中的问题:

  1. 您有一个单维数组,但是您正在尝试访问它像二维数组。为了使二维数组将@P_matrixRow_array的数组引用推入[@Row_array] .
  2. $d在哪里定义?如果将$d定义为标量变量,则将$d声明为my $dour $d使用%d,请使用sprintf

相关内容

最新更新