Wczytywanie macierzy z pliku do tablicy dwuwymiarowej ANSI C

0

Witam,
czytam forum juz jakiś czas i nie mogłem znaleźć odpowiedzi. Inne kody do mojego problemu mi nie działają więc tworzę ten temat.
Potrzebuje wczytać macierz z pliku txt. do tablicy dwuwymiarowej. Macierz może mieć rózny rozmiar ponieważ jest generowana przez inny program. Potrzebuje tego, ponieważ piszę algorytm w ktorym wykorzystuję taka macierz. Dzieki za pomoc.

Plik txt wyglada tak. np.

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

0

Czy znasz rozmiar tej macierzy?
Czy znasz przynajmniej ilość kolumn tej macierzy?
Czy w macierze są zawsze pojedyncze cyfry, a może liczby całkowite, a może zmiennoprzecinkowe?
Jak ma wyglądać (do czego służyć) wczytana macierz?

0

Macierz z tego co widzę zawsze tworzy się 7 kolumn 9 wierszy. Liczby naturalne dodatnie. Macierz potrzebuje w tablicy, ponieważ pisze program na podstawie algorytmu wyliczania regul decyzyjnych i potrzebuje wczytac macierz z pliku. Chcialbym wczytać macierz i wypisać tablice w ktorej ona bedzie.

0
typedef struct { unsigned M[9][7]; } Mat;

int Read(Mat *m,const char *fileName)
  {
   unsigned y,x,ret;
   FILE *fd=fopen(fileName,"r");
   if(!fd) return 0;
   for(y=0;y<9;++y) for(x=0;x<7;++x) fscanf(fd,"%u",m->M[y][x]);
   ret=!feof(fd);
   fclose(fd);
   return ret;
  }

...
Mat m;
if(!Read(&m,"plik.txt")) fprintf(stderr,"Brak pliku lub błąd odczytu\n");
0

cały program moj wyglada tak, niestety przestaje dzialac po uruchomieniu. Nie wiem co jest nie tak, pierwszy raz robie cos na plikach nie rozumiem jeszcze tego dobrze. Kompilator nie wywala bledu.

#include <stdio.h>
#include <stdlib.h>

typedef struct { unsigned M[9][7]; } Mat;

int Read(Mat *m,const char *fileName)
  {
   unsigned y,x,ret;

   FILE *fd=fopen(fileName,"r");
   if(!fd) return 0;
   for(y=0;y<9;++y) for(x=0;x<9;++x) fscanf(fd,"%u",m->M[y][x]);
   ret=!feof(fd);
   fclose(fd);
   return ret;
  }


int main()
{
    Mat m;
    if(!Read(&m,"1.txt")) fprintf(stderr,"Brak pliku lub błąd odczytu\n");

    return 0;
} 
0

Problem jest z pamiecia, ponieważ wywala blad z Segmentation fault.

2
for(x=0;x<9;++x)

Tu nie powinno być

for(x=0;x<7;++x)

?

0

No tak to juz sam poprawilem jednak nie rozwiazalo to problemu, nadal ten sam blad. Ja juz nie wiem gdzie szukac. :(

0

Nie wiem mi działa, może nie umiesz kodu dopisać:

#include <stdio.h>

typedef struct { unsigned M[9][7]; } Mat;
 
int Read(Mat *m,const char *fileName)
  {
   unsigned y,x,ret;
   FILE *fd=fopen(fileName,"r");
   if(!fd) return 0;
   for(y=0;y<9;++y) for(x=0;x<7;++x) fscanf(fd,"%u",&m->M[y][x]);
   ret=!feof(fd);
   fclose(fd);
   return ret;
  }
 
int main()
  {
   unsigned y,x;
   Mat m;
   if(!Read(&m,"plik.txt")) fprintf(stderr,"Brak pliku lub błąd odczytu\n");
   else
     {
      for(y=0;y<9;++y,printf("\n")) for(x=0;x<7;++x) printf("%2u",m.M[y][x]);
     }
   return 0;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1