0

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

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
$ 

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

4

3 回答 3

4

每个数字后必须有一个逗号,并且每一行都必须在 a 内{}

{ 1, -3, 4 },
{ 4, -3, 7 },
{ 8, -1, 10 }
于 2013-10-27T15:10:22.460 回答
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"
};

尽管您收到有关缺少大括号的编译器警告,但(对于第一种情况)上面data.txt确实应该如下所示:

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

(尾随,的 s 是可选的。)


要通过外部文件完全控制这一点,请执行以下操作:

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

这里的内容columns.txt只是一个整数,描述了数据data.txt应该被分解到的预期列数。

于 2013-10-27T15:21:31.800 回答
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}
于 2013-10-27T15:12:15.933 回答