C从文件中读取多种数据类型

时间:2013-04-30 16:54:30

标签: c file

我需要从文本文件中读取并将其点存储在int数组中。那部分我用FILE* fp = fopen( filename, "r" )成功完成了。使用fscanf (fp, "%f", &n);从文件中读取。我的文件结构类型如下(我正在存储信息以构建图表btw):

5 9
Male Female
2003 2004 2005 2006 2007 2008 2009 2010 2011
306.414 319.601 360.589 357.510  375.473 374.654 387.245 391.020 391.540
70.051 82.289 94.062 91.496 108.617 114.345 125.313 127.948 131.628

我需要存储以下内容:

  • char数组中的男性女性(多达nr个点行)
  • 2003 ... 2011 in另一个char数组(与point列一样多)
  • 每行点数1个数组。

到目前为止,我已经使用fscanf (fp, "%f", &n)完成了第3点,但是我需要帮助来解决如何将字符从字符交替到整数。这可能吗,还是我必须将文件拆分为legend.txt和points.txt?

编辑:所有信息都不是固定大小的。逻辑是:

  • 第一行nr rows / nr列
  • 第二行是y legend
  • 第三行是x legend
  • 下一行是随机的,nr列为max

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

int nrows, ncols;

fscanf(fp, "%d", &nrows);
nrows-=3;

fscanf(fp, "%d", &ncols);

int i,j;

// Heap allocation. Be careful, you might need more 
// space than it is available on the heap

char row_legend[nrows][SIZE];
char col_legend[ncols][SIZE];
float values[nrows][ncols];


for(i = 0; i < nrows; ++i)
   fscanf(fp, "%s", row_legend[i]);

for(i = 0; i < ncols; ++i)
   fscanf(fp, "%s", col_legend[i]);

for(i = 0; i < nrows; ++i)
   for(j = 0; j < ncols; ++j)
      fscanf(fp, "%f", &values[i][j]);