Как извлечь только номера файла в C? - PullRequest
0 голосов
/ 21 января 2019

Я изучаю 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 голосов
/ 21 января 2019

Этот пример должен работать так, как если бы вы могли предварительно инициализировать матрицу, в противном случае вам нужно будет изменить ее.

Что вы могли бы сделать:

1) Считайте файл в буфер, вы можете разобрать строку * части файла.

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


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...