我正在尝试将制表符和/或空格分隔的文本文件加载到二维数组中。该文件看起来像这样:
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
$
我知道有一些不太优雅的方法可以将这个文件加载到一个数组中,但出于纯粹的好奇心,我想知道是否可以实现上面显示的方法。非常感谢你花时间回答我的问题。
答案 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}