Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] Lettura matrice di dimensioni non note

    Buongiorno,
    Dovrei leggere una matrice da file di cui ho le dimensioni massime ma non le dimensioni effettive , ovvero so che la matrice possa essere al massimo NxM ma in realtà potrebbe essere più piccola .
    Non voglio utilizzare malloc (anche se penso che qui non sia strettamente necessario;
    Ho provato a risolvere il problema utilizzando la funzione isalpha() della lib. ctype.
    Riuscendo soltanto a trovare le dimensioni della colonna ma non quella delle righe , di seguito allego il codice , razie in anticipo



    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #define R_MAX 25
    #define C_MAX 25
    
    
    
    
    
    
    int main(int argc,char**argv)
    {
        char matrice[R_MAX][C_MAX];
        int i,r,q,col;
        char c='a',v='e';
        FILE *fp;
       
    
    
     if(argc!=2)
        {
            fprintf(stderr,"Errore sintassi\n");
            return 1;
        }
      
    
    
      if ((fp=fopen(argv[1],"r"))==NULL)
        {
            fprintf(stderr,"errore apertura file\n");
            return(1);
        }
     
           
    
    
     for(i=0;i<R_MAX;i++)
            {
                for(q=0;q<C_MAX;q++)
                { c=getc(fp);
                if(!(isalpha(c))&&c=='\n')
                     {
                         col=q;
                         q=C_MAX;
                     }
                    matrice[i][q]=c;
    
                }
            }
        }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Non ho capito perché pensi di usare la isalpha ...

    Come è fatto il file? Come sono scritti i valori dentro?

    E se non usi la malloc come pensi di allocare lo spazio esatto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Avendo le dimensioni massime della matrice so che la matrice non eccede quelle dimensioni !
    Uso isalpha in modo da arrivare al carattere new line ed avere il numero effettivo delle colonne !
    per le righe avrei potuto usare un while( fscanf !=EOF) e mettere un contatore sotto in modo da ottenere anche il numero di righe e poi usare la funzione rewind dell file pointer ?


    Non uso la malloc perché anche usando un 1000x1000 non mi inficia nel programma che devo fare ,certo non e la soluzione migliore ma per l allocazione dinamica non mi sento ancora pronto



    Un sample del file è questo


    asddfkgkhkj
    fjgjhkhkhkj
    ngnnvnbbbbb
    gjgjhjjjjjj
    Ultima modifica di franalotto94; 28-06-2014 a 16:38

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Dato che ogni riga è fatta da una sequenza di caratteri ti suggerisco di usare la fscanf (con un vettore di char temporaneo) per le righe e una strlen per colonne.

    Alla fine del ciclo puoi chiudere e riaprire il file o riportare all'inizio il puntatore, come preferisci.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Grazie mille per l aiuto quindi se ho capito bene dovrei fare una cosa del genere,

    char stringa[max+1];

    fp=fopen(....)
    while(fscanf(fp,"%s",stringa)!=EOF
    { i++;\\ dimensione righe
    }


    x=strlen(stringa);\\ ottengo cosi il numero di colonne ma la dimensione effettiva sarà x-1 considerando il new line al termine di ogni riga?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Fai qualche prova ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.