如何仅提取C中文件的编号?

时间:2019-01-21 19:18:51

标签: c

我正在学习C,但是我在练习中遇到问题,我有一个文件,并且只想将数字保存在数组中,但是我不知道如何忽略带有rowX字的列。

文件示例。

row1 1 2 4 6
row1 3 2 3 7
row1 4 3 7 6 2
row2 2 3 5 6 4
row2 1 1 8
row2 5 3 4 4 4
row3 1 4 3 2 3 5
row3 6 1 7 
row3 7 1 9

数组的维度对应于总数的行数和最长行的列,但我不知道如何提取该信息。

在其他练习中,他们在文件中仅包含数字,我使用了此代码,但在这种情况下我不知道如何修改它。

FILE *f;
f = fopen("example.txt","r");
if (f == NULL)
{                           
  printf("\nERROR\n");  
    return -1;
}
int matrix[row][col];
while(1)
{                                      
  if (feof(f))
      break;
    for (int i = 0; i < row; ++i)
    {
      for (int j = 0; j < col; ++j)
      {
        fscanf(f,"%d\n", &matrix[i][j]);
      }
    }
}

对于该示例,我考虑将空白添加0以获得以下矩阵:

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

但是我不知道如何实现它,希望你们能帮助我或就如何解决这个问题给我建议

1 个答案:

答案 0 :(得分:0)

此示例应能像能够预先初始化矩阵一样工作,否则将需要对其进行修改。

您可以做什么:

1)将文件读入缓冲区,可以解析出文件的row *部分。

2)在缓冲区中找到最大的行(编号最多的那一行,并找到行数

3)初始化矩阵

4)将缓冲区解析为矩阵

int c;
int seen = 0;
int column = 0;
int row = 0;
while ((c = getc(f)) != EOF){
  if(seen == 0 && c ==  ' '){
   seen = 1;
  } else if(seen == 1 && c != ' '){
   matrix[row][column] = c;
   column = column + 1;
  } else if(c == '\n' || c == '\r\n'){
   seen = 0;
   column = 0;
   row = row + 1;
  }
}