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:
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".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"); }
Qualcuno è in grado di capire il perchè?
Grazie

Rispondi quotando