> [C]Jak wczytać dane do macierzy z pliku

homisia
Użytkownik
Użytkownik
Posty: 1
Rejestracja: 27 cze 2008, o 23:09
Płeć: Mężczyzna
Lokalizacja: znikąd

> [C]Jak wczytać dane do macierzy z pliku

Post autor: homisia »

No wiec mam program który ma wczytywać liczby z pliku do macierzy(np. 1; 2; 3) i je transponować. Niestety nie wychodzi mi wczytywanie z pliku, mam tylko z klawiatury. Co gdzie zmienić?

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i,j,n,m,**mac;

scanf("%d %d",&n,&m);

mac = (int **) malloc(n*sizeof(int));
for(i=0;i<n;i++) mac[i] = (int *) malloc(m*sizeof(int));

for(i=0;i<n;i++)
    for(j=0;j<m;j++)
        scanf("%d",&mac[i][j]);

/wyświetla macierz transponowana
for(i=0;i<m;i++)
    {
    for(j=0;j<n;j++)
        printf("%d ",mac[j][i]);
    printf("
");
    }
return 0;
}
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

> [C]Jak wczytać dane do macierzy z pliku

Post autor: soku11 »

Nic nigdzie nie zmieniac, tylko napisac oddzielna funkcje odpowiedzialna za wczytywanie danyh z pliku. Najpierw polecam dobrac odpowiedni jego format. Polecam cos na styl:

Kod: Zaznacz cały

1 2 5 10 
Co bedzie oznaczac ze macierz ma 1 wiersz, 2 kolumny i jej zawartosci to 5 oraz 10(wartosc wczytywane najpierw do pierwszej kolumny pozniej do drugiej, itd). Na koncu musi byc spacja! Wtedy kod moze byc np. taki:

Kod: Zaznacz cały

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

#define CHECK_SPACE(in)   if(fgetc(in)!=) return -1;

int main()
{
  const char* FileName="1.txt";
  FILE* in=NULL;
  int** Matrix=NULL;
  unsigned int rows=0;
  unsigned int columns=0;


  if(! (in=fopen(FileName,"r")) )
    return -1;

  fscanf(in,"%u",&rows);
  CHECK_SPACE(in);
  fscanf(in,"%u",&columns);

  Matrix=(int**) malloc(rows*sizeof(int));
  for(unsigned int i=0;i<rows;++i)
    Matrix[i]=(int*) malloc(columns*sizeof(int));

// Matrix[i][j];
// i-wiersz; j-kolumna
  for(unsigned int i=0;i<columns;++i)
    for(unsigned int j=0;j<rows;++j)
    {
      fscanf(in,"%d",&Matrix[j][i]);
      CHECK_SPACE(in);
    }


  fclose(in);

  for(unsigned int i=0;i<rows;++i)
  {
    for(unsigned int j=0;j<columns;++j)
    {
      printf("%d	",Matrix[i][j]);
    }
    printf("
");
  }


  return 0;
}




POZDRO
ODPOWIEDZ