Visualizzazione dei risultati da 1 a 10 su 10

Visualizzazione discussione

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    144

    [C] problema con stampa_matrice allocata dinamicamente

    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
    Ultima modifica di mbistato; 18-08-2014 a 12:59

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.