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

    [C] Acquisizione matrice da file

    Salve a tutti ragazzi, sto provando a svolgere un semplice esercizio, in cui devo acquisire una matrice 10X10 da un file di testo e poi stamparla a schermo.
    Il file di testo è composto dai valori della matrice e dalla sua dimensione (elencata per ultima)
    Il programma,dopo aver letto i valori da file, li memorizza in un vettore e poi effettua il passaggio da vettore a matrice.
    Sto avendo alcuni problemi per quanto riguarda l'output prodotto dal programma, potreste indicarmi il perchè?

    Questo è il codice del programma:
    codice:
    #include <stdio.h>
    
    int dimensione(FILE*);
    void acquisisci_matrice(FILE*,int, unsigned char(*)[10]);
    void visualizza_matrice(unsigned char(*)[10], int);
    void main()
    {
    	FILE *fp;
    int dim=0;
    unsigned char A[10][10];
    	fp=fopen("matrice2.txt", "r");
    	if(fp==NULL) printf("File non esistente\n");
    else
    {
    	dim=dimensione(fp);
    	fclose(fp);
    	if(dim==0) printf("File vuoto!");
        else
    	{
    		fp=fopen("matrice.txt", "r");
            printf("La dimensione e' %d ",dim);
    		acquisisci_matrice(fp,dim,A);
    		visualizza_matrice(A,dim);
    fclose(fp);
    
    	}
    }
    }
    
    void acquisisci_matrice(FILE *fp, int DIM, unsigned char(*matrice)[10])
    {
    unsigned char vett[101];
    unsigned char V;
    int i=0;
    printf("Acquisizione\n");
    while(fscanf(fp,"%s", &V)!=EOF)
    { vett[i]=V; i++; 
    for(i=0;i<DIM;i++) printf("%c",vett[i]); 
    }
    i=0;
    printf("Passaggio da vettore a matrice\n");
    for(int j=0;j<DIM;j++) {
    	for(int k=0;k<DIM; k++)
    	{ matrice[j][k]=vett[i]; i++; };
    };
    
    }
    
    int dimensione(FILE *fp)
    { int DIM=0, V;
    while(fscanf (fp, "%d", &V)!=EOF)
    DIM=V;
    return DIM;
    mentre il file matrice.txt è semplicemente questo qui:
    codice:
    1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
    10
    l'output che mi dà è il seguente:
    codice:
    La dimensione e' 10 Acquisizione
    16789012341678901234Passaggio da vettore a matrice
    16789012341678901234567890123456789012345678901234567890123456789012345678901234
    5678901234567890 ÌÌÌPress any key to continue
    Non capisco perchè visualizza i numeri in questo modo, e non capisco cosa sbaglio. Sicuramente ho disposto male i dati nel file, ma come dovrei disporli? Grazie in anticipo per l'aiuto e la pazienza

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Manca la "visualizza_matrice"
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Avevo dimenticato di copiarla nel codice postato, in realtà c'è... se non ci fosse penso che il compilatore mi avrebbe dato errori.
    Eccola:

    codice:
    void visualizza_matrice(unsigned char(*matrice)[10], int DIM)
    {int i,j;
    for(i=0;i<DIM;i++)
    {for(j=0;j<DIM;j++)
    printf("%c", matrice[i][j]);
    }}

  4. #4
    Scusate l'insistenza, ma nessuno ha idea del motivo per cui mi viene generato questo output? Non riesco a capire come fare

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Tu all'inizio leggi il file matrice2.txt e poi il file matrice.txt ... perché due file diversi?

    E poi, nella funzione acquisisci_matrice (riscritta per chiarezza) in questo ciclo while

    codice:
    while(fscanf(fp,"%s", &V)!=EOF)
    {
        vett[i]=V; 
        i++; 
    
        for(i=0;i<DIM;i++) 
            printf("%c",vett[i]); 
    }
    la variabile i viene utilizzata sia dalla while sia dalla for al suo interno ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Originariamente inviato da oregon
    Tu all'inizio leggi il file matrice2.txt e poi il file matrice.txt ... perché due file diversi?

    E poi, nella funzione acquisisci_matrice (riscritta per chiarezza) in questo ciclo while

    codice:
    while(fscanf(fp,"%s", &V)!=EOF)
    {
        vett[i]=V; 
        i++; 
    
        for(i=0;i<DIM;i++) 
            printf("%c",vett[i]); 
    }
    la variabile i viene utilizzata sia dalla while sia dalla for al suo interno ...
    E' lo stesso file, avevo cambiato il nome e ho dimenticato di averlo aperto due volte. In realtà nel mio codice c'è scritto "matrice.txt" da ambo le parti.


    OK risolto. Ho spostato il ciclo for al di fuori del while (non aveva molto senso in effetti)
    e nella fscanf ho sostituito lo specificatore %s con %c . Sembra andare
    Grazie

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.