Считать значения из файла и сохранить его в 2D матрице - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь прочитать значения из файла и после некоторой операции записать в другой файл.Здесь возникает небольшая проблема, так как я также пытаюсь сохранить значения в 2D-массиве и отобразить его.Чтение моего файла и запись файла показывают правильные результаты, но моя программа выдает исключение, когда дело доходит до отображения части матрицы.

#include <stdio.h>
#include <ctype.h>

#ifndef NULL
#define NULL   ((void *) 0)
#endif

int main(void)
{
    FILE *file  = NULL; //for file read
    FILE *fptr  = NULL; //for file write

    int mat[182][274];

    // code to read and display number from file
    // open file for reading
    file = fopen("file.txt", "r");
    fptr = fopen("file1.txt", "w");
    int i = 0,j=0;

    fscanf (file, "%d", &i);    
    while (!feof (file))
    {
        symbol = fgetc(file);

        if (symbol == '\n' || feof(file))
        {
            fprintf (fptr,"\n");
            printf("\n");
        }
        else{
            j=255-i;

            mat[i][j]=j;

            fprintf (fptr,"%d ", j);
            fprintf (fptr," ");
            printf ("%d ", j);
        }

        fscanf (file, "%d", &i);

   }
   fclose (file);
   fclose (fptr);


   //Facing issue in this part
   int k;
   int l;
   for (k=0;k<=182;k++)
   {

       for(l=0;l<=274;l++)
       {

           printf("%d ", mat[k][l]);
       }
   }

   return 0;
}

1 Ответ

0 голосов
/ 26 декабря 2018

Массивы в C начинаются с 0 и заканчиваются (array_size - 1).

Поскольку вы обращаетесь к памяти только за пределами массива, вы, скорее всего, испытываете ошибки сегментации.

Чтобы устранить эту проблему, измените следующие строки:

 for (k=0;k<182;k++)
 {

  for(l=0;l<274;l++)
  {

      printf("%d ", mat[k][l]);
  }
 }

Обратите внимание, что я изменил реляционные операторы с <= и >= на < и > соответственно.

Наряду с этим вам может потребоваться полная инициализация массива.Нечетные значения могут быть напечатаны, если массив не инициализирован.(@Weather Vane).

Однако, чтобы быть уверенным в этом, нам нужны file.txt и file1.txt.

...