Ciao a tutti,
sto cercando di scrivere un programma in C che riesca a caricare una matrice da file e stamparla a video.
Il codice finora scritto è il seguente:
codice:
#include <stdio.h>#include <stdlib.h>
#define MAX_C 50
#define MAX_R 50
typedef char** matrix;
int R, C;
matrix matricevip;
void leggi_matrice(const char* nomefile, matrix m, int *r, int *c);
void stampa_matrice(matrix m, int r, int c);
int main(int argc, char *argv[])
{
char* nomefile = argv[1];
if(argc!=2)
{
printf("Numero di argomenti inseriti errato!\n");
exit(EXIT_FAILURE);
}
else
{
//metto la & prima delle variabili per indicare che sto effetuando un passaggio di parametri per riferimento (ovvero per indirizzo)
//e non per valore
leggi_matrice(nomefile, matricevip, &R, &C);
stampa_matrice(matricevip, R, C);
}
return 0;
}
void leggi_matrice(const char* nomefile, matrix m, int *r, int *c)
{
//**matricevip è un doppio puntatore(un puntatore per le righe e uno per le colonne)
char buffer[MAX_C], *res, temp;
int i = 0, j = 0;
FILE *ptrvip = fopen(nomefile, "r");
if(nomefile == NULL)
printf("Impossibile aprire il file %s\n", nomefile);
else
{
printf("File %s letto correttamente!\n\n", nomefile);
//Acquisizione numero di colonne
res = fgets(buffer, MAX_C, ptrvip);
while(res[i] != '\0')
{
*c = *c +1;
i++;
}
C = *c;
//Riposiziono il cursore all'inizio del file
fseek(ptrvip, 0, 0);
//Conto il numero della righe
while(1)
{
res = fgets(buffer, MAX_R, ptrvip);
if(res == NULL)
break;
*r = *r + 1;
}
R = *r;
//Allocazione dinamica della memoria
m = (char**) malloc (*c * sizeof(char*));//alloco lo spazio per le colonne
for(i = 0; i < *c; i++)
m[i] = (char*) malloc (*r * sizeof(char));//alloco lo spazio per le righe
//Riposiziono il cursore all'inizio del file
fseek(ptrvip, 0, 0);
//Caricamento della matrice da file
while(!feof(ptrvip))
{
for(i = 0; i < *r; i++)
for(j = 0; j < *c; j++)
{
fscanf(ptrvip, "%c", &temp);
if(temp != '\0')
m[i][j] = temp;
}
}
fclose(ptrvip);
}
}
void stampa_matrice(matrix m, int r, int c)
{
printf("\n");
int i,j;
for (i=0;i<r;++i)
{
for (j=0;j<c-1;++j)
printf("%c",m[i][j]);
printf("\n");
}
printf("\n");
}
La lettura del file e il caricamento della matrice va a buon fine, ma il programma smette di funzionare non appena richiamo la funzione "stampa_matrice".
Qualcuno è in grado di capire il perchè?
Grazie