2014-02-07 64 views
0

我想弄清楚如何从一个文件中读取两个矩阵,然后将它们分配给两个不同的二维数组。矩阵在文本文件中以新行分隔。我设法让第一个阅读成功,但现在我不知道如何阅读第二个。我看到它的方式,必须考虑并检查分离这两个矩阵的线。如何让程序读取第二个矩阵并将其分配给数组?两个二维数组,两个矩阵,一个文件

矩阵和数组都是4x4。

这是文本文件的样子:

3 4 5 7 

5 16 7 12 

11 12 3 9 

9 8 1 12 


15 4 3 6 

1 12 3 12 

7 8 19 9 

11 12 8 5 

这里是我的正常工作的第一阵列码。

for (int y = 0; y < 4; ++y) 
{ 
    for (int x = 0; x < 4; ++x) 
    { 
     infile >> array1[x][y]; 
    } 
} 

这里是我的代码我想不通的数组。

for (int y = 0; y < 4; ++y) 
     { 
      for (int x = 0; x < 4; ++x) 
      { 
       if(x == '\n' && y == '\n') //My attempt. 
       { 
        infile >> array2[x][y]; 
       } 
      } 
     } 

这里是输出:

This will check to make sure numbers in file are written to the first array. 
3 4 5 7 
5 16 7 12 
11 12 3 9 
9 8 1 12 

This will check to make sure numbers in file are written to the second array. 
9.21742e-314 1.0572e-307 7.29112e-304 3.87184e-306 
1.06498e-307 1.65425e-317 6.79039e-313 4.22748e+266 
5.92879e-323 1.06196e-307 6.95089e-308 9.88799e-315 
1.79648e-313 8.48798e-314 6.95224e-308 1.06193e-307 
Press any key to continue . . . 

任何帮助表示赞赏!

+0

要读取矩阵,请在StackOverflow中搜索“C++读取文件解析矩阵” –

+0

对于Matrix类,请在Web上搜索“C++常见问题解答矩阵”。 –

回答

1

当您使用“格式化输入”运算符>>来读取文件时,项目之间的类型和数量空格(空格,制表符,换行符)是无关紧要的。这意味着你根本不会看到空行。如果您需要根据文件的行解析文件,请考虑使用getline,并使用istringstream解析单行文件。

另一方面,如果您知道两个数组的大小,则可以像读取第一个数组那样简单地读取第二个数组。多余的空行会被忽略。

您读取第二个数组的代码不起作用的原因是,您将索引变量与'\n'进行比较,在大多数系统上恰好为10。由于您的索引范围从0到3,因此if条件永远不会成立,所以没有任何内容会被读取,因此您会看到未初始化内存的转储。

+0

谢谢,这很有道理。我无法相信修复是如此简单。感谢您解决问题并回答我的问题:P – Titan

0

您可以完全按照第一个读取第二个数组。原因是,当你开始从流中读取数据时,首先它会丢弃空格,直到它遇到不是空白的东西。然后它会逐个获取数字/字符,直到再次遇到空白为止。所以,换行符没有问题,您可以毫无问题地读取剩余的数组。

相关问题