将特定格式的文本文件读入c中的2d数组/矩阵

时间:2015-04-17 13:54:24

标签: c arrays matrix text-files

我正在尝试将特定格式的文本文件读入2d数组,但我不认为我做得对。这就是我到目前为止所做的:

int main()
{
   int start;
   int end;
   int ch = 0;
   int lines = 0;
   int i;
   int j;

   FILE *fp;
   fp = fopen ("file.txt", "r");
   rewind(fp);
   while(!feof(fp))
   {
       ch = fgetc(fp);
       if (ch == '\n')
       lines++;
   }

   int graph[lines][lines];
   memset(graph, 0, sizeof lines);

   //I don't think I'm doing the matrix populating correct. PLEASE HELP!
   for (i = 0; i < lines; i++)
   {
       for (j = 0; j < lines; j++)
       {
           int node;
           int edge;
           fscanf(fp, "%d,%d", &graph[&node][&edge]);
       }
   }
}

while循环及其中的所有内容都会计算文本文件中有多少行,所以我将矩阵设置为文件中的行数。

这是我的文本文件

2,2 4,6
1,2 3,3 4,8 5,5
2,3 5,7
1,6 2,8 5,9
2,5 3,7 4,9

这是邻接列表,因此第一行表示具有边缘权重2的节点2,而具有边缘权重6的节点4与节点1(文本文件的第一行)相邻,依此类推。

我的问题是,我不知道如何将文本文件中的信息放入矩阵中。任何建议都会有所帮助!

1 个答案:

答案 0 :(得分:0)

给你的一些建议:

  • 似乎你正在学习C,这是你的任务,因此你将更好地解决这些问题。因为每项任务都有一些目的

  • 在学习C中停止使用Turbo C / C ++,因为它是旧式的,目前不符合编码要求。

许多错误

  1. 倒带(fp) - 打开文件后不需要,但在文件末尾到达文件顶部时需要。因此,倒带(fp)将如下:

    fp = fopen ("file.txt", "r");
    while(!feof(fp)){
       ch = fgetc(fp);
       if (ch == '\n')
       lines++;
    }
    rewind(fp);
    
  2. 现在读取值并填充2D数组,如下所示:

     while (!feof(fp)) {
         int node;
         int edge;
         char c;
         int lineno=0;
    
         fscanf(fp, "%d,%d%c", &node, &edge, &c);
         graph[node][edge]=lineno;
         if ( c == '\n' ){
              lineno++;
         }
     }