【问题标题】:C read multiply data types from fileC从文件中读取乘法数据类型
【发布时间】:2013-04-30 16:54:30
【问题描述】:

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

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 在另一个 char 数组中(与 points 列一样多)
  • 每行点 1 个数组。

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

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

  • 第一行 nr 行 / nr 列
  • 第二行是y图例
  • 第三行是 x 图例
  • 下一行是随机的,最多 nr 列

【问题讨论】:

  • 能不能把它放在一个数组里,两个fscaf放在里面,这样交替。如果你有完全相同数量的寄存器,你可以读取一个结构。
  • 所以“5 9”应该是“2 9”,不是吗?
  • 没有。我需要 5 知道何时停止读取文件。 nr 要绘制的线 = 5-3,nr 每条线的点数 = 9。前三行始终是固定的。
  • 在你的第二行,只有两列,男性女性,对吧?或者它也有 9 列,就像第 3,4 和 5 行一样。

标签: c file


【解决方案1】:

你可以试试这样的:

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]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多