2013-10-27 94 views
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 
$ 

我知道有优雅的少的方式来加载此文件到一个数组,但出于纯好奇,我想知道是否有可能implemen上面显示的方法。非常感谢您花时间回答我的问题。

+1

'int nums [] []'无效。你可以拥有的最大灵活性是'int nums [] []'。 – alk

+0

如果您确定不需要在运行时读取文件,并且文件的内容格式正确,您应该可以这样做(不要尝试以_clever_方式解决任务)... –

+0

'# include指令只是在编译时将引用的文件放入该源文件中。你可以将'matrix.txt'的内容剪切+粘贴到'hangserver.c'中,并从那里找出语法错误。 – Bert

回答

3

必须有一个逗号后的每个数字和每一行必须是一个{}内:

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

谢谢大家的回复。我也需要按照alk所描述的方式来绑定数组。 – dps

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} 
2

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

例如,如果你有

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

应该如何编译器知道你要一个3×2×3或或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 ST情况)真的应该是这样的:

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

(尾随, s为可选。)


要通过从外部文件完全避开这个做:

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

这里columns.txt的内容也只是描述列的预期数量从data.txt数据应被分解为整数至。

+0

哎唷,那不适合给这样的推荐!认真! (虽然它的技术上正确当然)... –

+0

@ g-makulik:OP要求,让我们来讨论它。 – alk

+0

让我们尽快讨论OP的醒来澄清更多关于他的真实意图;)。如果解决方案的输入在某个更大的系统中以某种方式以某种方式生成,或者仅用于测试目的,则可能会有问题。 –