我试图弄清楚如何从一个文件中读取两个矩阵,然后将它们分配给两个不同的2D数组。矩阵由文本文件中的新行分隔。我设法让第一个成功阅读,但现在我无法弄清楚如何阅读第二个。我看到它的方式,必须考虑并检查分隔两个矩阵的线。如何让程序读取并将第二个矩阵分配给数组?
矩阵和数组都是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 :(得分:1)
当您使用“格式化输入”操作符>>
读取文件时,项目之间的空格(空格,制表符,换行符)的种类和数量(在您的情况下为数字)是无关紧要的。这意味着你根本看不到空行。如果您需要根据文件的行解析文件,请考虑使用getline
代替并使用istringstream
解析单行。
另一方面,如果你知道两个数组的大小,你可以像读第一个数组一样读取第二个数组。额外的空行只会被忽略。
读取第二个数组的代码不起作用的原因是您将索引变量与'\n'
进行比较,在大多数系统上恰好为10。由于您的索引范围从0到3,if
条件永远不会成立,因此根本不会读取任何内容,因此您会看到未初始化内存的转储。
答案 1 :(得分:0)
您可以完全按照第一个读取第二个数组。原因是,当你开始从流中读取时,它首先会丢弃空格,直到它遇到不是空格的东西。然后它逐个获取数字/字符,直到它再次遇到空白。因此,换行没有问题,您可以毫无问题地阅读剩余的数组。