将文本文件作为多维数组加载?

时间:2013-10-27 15:08:12

标签: c++ c

我正在尝试将制表符和/或空格分隔的文本文件加载到二维数组中。该文件看起来像这样:

1 -3 4
4 -3 7
8 -1 10

我可以访问一段代码,表明可以执行以下操作:

int nums[][] = {
    #include "matrix.txt"
};

但是,每当我尝试编译此代码时,我都会收到错误:

$ gcc hangserver.c 
hangserver.c:10:5: error: array type has incomplete element type
In file included from hangserver.c:11:0:
matrix.txt:1:5: error: expected ‘}’ before numeric constant
$ 

我知道有一些不太优雅的方法可以将这个文件加载到一个数组中,但出于纯粹的好奇心,我想知道是否可以实现上面显示的方法。非常感谢你花时间回答我的问题。

3 个答案:

答案 0 :(得分:3)

每个数字后必须有一个逗号,每行必须在{}内:

{ 1, -3, 4 },
{ 4, -3, 7 },
{ 8, -1, 10 }

答案 1 :(得分:2)

您的方法存在概念性问题。

例如,如果你有

1, 2, 3, 4, 5, 6,

编译器应该如何知道您需要3x2或2x3或1x6或6x1阵列?

因此需要提前知道列数。

对于上面的例子,这个

int matrix [][3] = {
#  include "data.txt"
};

也会这样做:

int matrix [][2] = {
#  include "data.txt"
};

和此:

int matrix [][1] = {
#  include "data.txt"
};

和此:

int matrix [][6] = {
#  include "data.txt"
};

虽然你得到一个关于缺少大括号的编译器警告,但是(对于1 st 情况)上面data.txt真的应该是这样的:

{1, 2, 3,},{4, 5, 6,},

(尾随,是可选的。)


要通过外部文件完全控制此操作:

int matrix[][
#  include "colums.txt"
] = {
#  include "data.txt"
};

此处columns.txt的内容只是一个整数,用于描述来自data.txt的数据的目标列数。

答案 2 :(得分:1)

该行扩展为:

int nums[][] = {
    1 -3 4
    4 -3 7
    8 -1 10
     };

这是不可接受的C和C ++语法。尝试将matrix.txt文件更改为

{1, -3, 4},
{4, -3, 7},
{8, -1, 10}