这是我的程序,我想让用户逐行输入矩阵并打印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";
}
我改变了表达式=&gt; printf "$d ",$P_matrix[$i][$j];
打印$P_matrix[$i][$j]
但仍然无法工作。
答案 0 :(得分:3)
要创建多维数组,必须使用引用。使用
push @P_matrix, [ @Row_array ];
创建所需的结构。
此外,chomp
不会返回修改后的字符串。只需使用
chomp $Row;
从$ Row中删除换行符。此外,如果您chomp
split
,则根本不需要' '
。
printf
使用%
作为格式字符,而不是$
。
您可以使用Data::Dumper
检查复杂的数据结构。使用strict
和warnings
可帮助您避免常见问题。以下是我编写程序的方法:
#!/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";
}
答案 1 :(得分:0)
首先请使用use strict; use warnings;
代码中的问题:
Row_array
中@P_matrix
的数组引用推送为[@Row_array]
。$d
在哪里定义?如果您将$d
表示为标量变量,请将my $d
声明为our $d
或$d
。
或强>
要使用%d
,请使用need sprintf
。请阅读this。