Risultati da 1 a 2 di 2

Discussione: Problema con matrice di caratteri

  1. #1
    New Member
    Data Registrazione
    19-08-2014
    Messaggi
    1

    Problema con matrice di caratteri

    Salve a tutti,

    mi sono appena iscritto nel vostro forum e volevo chiedervi un aiutino per il mio programma in c.

    Il codice che esegue mi segnala dei warning quando richiamo le funzioni nel main passandogli la matrice di caratteri matricevip[][].

    Qualcuno può darmi una dritta?

    Codice:
    #include <stdio.h>#include <stdlib.h>
    #define MAX_C 50
    #define MAX_R 50
    
    
    int R, C;
    
    
    
    
    void leggi_matrice(const char*, char [][MAX_C]);
    void stampa_matrice(char [][MAX_C]);
    void salva_file(const char*, char [][MAX_C]);
    void delete_c(char [][MAX_C], int);
    void delete_r(char [][MAX_C], int);
    
    
    int main(int argc, char *argv[])
    {
        char tipo;
        char matricevip[MAX_R][MAX_C];
        int numero;
        char* nomefile = argv[1];
    
    
        if(argc!=2)
        {
            printf("Numero di argomenti inseriti errato!\n");
            exit(EXIT_FAILURE);
        }
        else
        {
            leggi_matrice(matricevip[MAX_C], nomefile);
            stampa_matrice(matricevip);
        }
    
    
        printf("\n");
        printf("Comando: ");
        scanf("%c %d", &tipo, &numero);
        //La riga che segue serve per togliere l'invio dal buffer
    
    
        while(tipo != 'x'){
        switch(tipo)
            {
            case 'c':
    
    
                if(!numero){
                    printf("Errore: colonna non specificata!\n");
                }
                else if(numero < 0 || numero > C){
                    printf("Errore: il numero della colonna specificata eccede la dimenzione max del file!\n");
                }
                else
                {
                    printf("test_1");
                    delete_c(matricevip, numero);
                    printf("Rimossa colonna %d", numero);
                    stampa_matrice(matricevip);
    
    
                }
    
    
                printf("Comando: ");
                scanf("%c %d", tipo, &numero);
                continue;
    
    
            case 'r':
                if(!numero){
                    printf("Errore: riga non specificata!\n");
                }
                else if(numero < 0 ||numero > R){
                    printf("Errore: il numero della riga specificata eccede la dimenzione max del file!\n");
                }
                else
                {
                    delete_r(matricevip, numero);
                    printf("Rimossa riga %d", numero);
                    stampa_matrice(matricevip);
    
    
                }
    
    
                printf("Comando: ");
                scanf("%c %d", tipo, &numero);
                continue;
    
    
            case 'q':
                salva_file(nomefile, matricevip);
                break;
    
    
            default:
                printf("Comando non valido");
                exit(EXIT_FAILURE);
                break;
    
    
    
    
            }
        }
    
    
        return 0;
    }
    
    
    
    
    void leggi_matrice(const char* nomefile, char mat[MAX_R][MAX_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, R = 0, C = 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++;
          }
    
    
          //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;
          }
    
    
          //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')
                      mat[i][j] = temp;
                }
                printf("\n");
    
    
          }
    
    
          fclose(ptrvip);
       }
    }
    
    
    
    
    
    
    void stampa_matrice(char mat[MAX_R][MAX_C])
    {
        printf("\n");
        int i,j;
        for (i=0;i<R;++i)
            {
            for (j=0;j<C;++j)
                printf("%c", mat[i][j]);
            }
        printf("\n");
    }
    
    
    
    
    void salva_file(const char* nomefile, char mat[MAX_R][MAX_C]){
        int i = 0, j = 0;
        FILE *ptrvip = fopen(nomefile, "w");
        if(nomefile == NULL)
            printf("Impossibile aprire il file %s\n", nomefile);
        else{
            for(i=0; i<R; i++){
                for(j=0; j<C; j++)
                {
                fprintf(ptrvip, "%c\n", mat[i][j]);
                }
                fprintf(ptrvip, "%c\n", '\n');
            }
       }
    
    
    }
    
    
    void delete_c(char mat[MAX_R][MAX_C], int colonna){
    
    
        int i,j;
        if(colonna == C-1)
            C = C - 1;
        else{
            for(i=0; i<R; i++){
                for(j=colonna; j<C; j++)
                {
                mat[i][j] = mat[i][j+1];
                }
            }
                C = C - 1;
        }
            printf("La matrice è: \n");
    
    
            stampa_matrice(mat);
    
    
    }
    
    
    
    
    void delete_r(char mat[MAX_R][MAX_C], int riga){
    
    
        int i,j;
        if(riga == R-1)
            R = R - 1;
        else{
            for(i=riga; i<R-1; i++){
                for(j=0; j<C; j++)
                {
                mat[i][j] = mat[i+1][j];
                }
            }
                R = R - 1;
        }
            printf("La matrice è: \n");
    
    
            stampa_matrice(mat);
    
    
    }

  2. #2
    Advanced Member L'avatar di Predator
    Data Registrazione
    23-10-2004
    Località
    Vicenza
    Messaggi
    842
    Ciao,

    più che di un warning si tratta di un errore. I parametri inseriti in leggi_matrice in riga 34 sono invertiti perché prima dovresti passare il nome del file poi la matrice stessa (sei sicuro di voler passare l'elemento in posizione MAX_C che anch'esso è un array di caratteri?).

    Per quanta riguarda i tuoi warning hai dei format string usati male, infatti usi il %c ma stai passando un intero e quinti un %d o %i, o %u dipende da cosa vuoi passare. Per ogni dubbio fa riferimento a printf - C++ Reference

    Ciao
    ---- Death is near you ----

Segnalibri

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •