File con array

di il
3 risposte

File con array

Salve, ho scritto questo codice che apre un file con un array di numeri e ne calcola la media. Solo che la consegna chiede di non limitare la lunghezza della lista di numeri acquisita e non riesco a capire come. Qualcuno può aiutarmi?
#include <stdio.h>
int main()
{
    FILE *fp1;
    char nomefile[100];
    int n, cont=0, somma=0, a[1000], i;
    printf("Inserire il nome del file: ");
    scanf("%c", nomefile);
    
    
    if((fp1=fopen("file.txt", "r"))!=NULL){
        fscanf(fp1, "%d", &n);
        for(i=0; i<n-1; i++){
            fscanf(fp1, "%d", &a[i]);
        }
        fclose(fp1);
        for(i=0; i<n-1; i++){
            somma+=a[i];
            cont=somma/n;
        }
    }else((printf("Il file non esiste!")));
    printf("somma: %d", somma);
    printf("\n");
    printf("media: %d", cont);
    
    
    return(0);}

3 Risposte

  • Re: File con array

    Dal C99 puoi dichiarare int a[n]; appena dopo aver acquisito n.

    Se gli array sono molto grandi, puoi allocare dinamicamente liste e nodi come ti insegna qualsiasi testo
    
    typedef struct nodo {
        int valore;
        struct nodo * prossimo;
    } nodo_t;
    
  • Re: File con array

    Siccome NON SAI a priori quante linee ci sono nel file di testo, hai a disposizione ben ALMENO DUE strategie, ma anche TRE o QUATTRO:

    1) banale: A) conti le righe, B) allochi un vettore di quel numero di righe, C) inserisci in ogni cella il valore corrispodente a quella riga. Ti sto dicendo che devi leggere il file DUE volte. Praticamente l'uovo di Colombo

    2) semplice: A) allochi un vettore di N elementi e ti tieni un contatore "n" con il numero di elementi EFFETTIVAMENTE utilizzati nel vettore, B) leggi il file una riga alla volta MA controlli di NON SFORARE la dimensione del vettore. Quando n==N, ALLOCHI un vettore grande 2N, copi al suo interno i primi N elementi, butti via il vecchio vettore, il nuovo vettore diventa il TUO vettore e 2N diventa il nuovo N, C) continui a leggere fino alla fine del file. Praticamente come chiedere di che colore e' il cavallo bianco di Napoleone

    3) facile: invece di un vettore usi una lista, come ti e' gia' stato detto

    4) astuto: invece di un vettore o una lista, usi una "lista di vettori", o meglio, un "vettore di vettori", allocato dinamicamente, con un'intelligente gestione dell'iindice usato per accedere agli elementi del vettore "teorico": devi passare da UNA a DUE dimensioni

    Ovviamente si potrebbe continuare

    URCA: dal codice si EVINCE che la prima riga del file contiene il numero di record!
    Quindi soluzione

    0) STRA-elementare: A) allochi un vettore di quel numero di righe, B) inserisci in ogni cella il valore corrispodente a quella riga
  • Re: File con array

    A parte il fatto che il codice mostrato già presenta errori come la scanf del nome del file con %c...

    E quel codice prevede che la prima riga contenga il numero di righe ... è così?

    E cont va calcolata fuori dal ciclo una sola volta... che senso ha farlo n volte?
Devi accedere o registrarti per scrivere nel forum
3 risposte