0

これは私のプログラムです。ユーザーに行列を1行ずつ入力させ、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]; を printに変更しました$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. 1 次元配列がありますが、2 次元配列のようにアクセスしようとしています。2次元配列にするために、Row_arrayin @P_matrixasの配列参照をpushし[@Row_array]ます。
  2. どこで$d定義されていますか?$dスカラー変数として宣言するか、my $dまたはスカラー変数としてour $d意味する場合$dまたは を使用%dするには、 need を使用しますsprintfこれを読んでください。
于 2013-03-04T09:23:07.327 に答える