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

    Aggiornare un array di strutture e scrivere un file aggiornato in C

    Salve,
    premetto che ho pochi mesi di esperienza in C.
    Vorrei creare un programma in cui prendo in input due file di testo,
    il primo con CODICE, NOME e PREZZO di *qualcosa di indefinito*, il secondo con CODICE e PREZZO_AGGIORNATO.
    Il programma deve scrivere un file con le varie informazioni del primo file, aggiornando il PREZZO.

    Ho usato array di strutture, così da poter immagazzinare tante *cose*.
    Ho prima acquisito da file le info, poi le ho messe negli array, e ho fatto delle stampe di verifica. Tutto ok.

    Ora però, nell'ultima parte del programma, non riesco a scrivere una funzione funzionante per aggiornare le strutture negli array.. ho provato con questo:
    codice:
    //i e j sono indici di posizione dei due array (il primo (a) con le info e il secondo (b) con gli aggiornamenti//    i=0;
    j=0;
    //n è il numero di *cose da aggiornare* presenti nel primo array//
    while(j<n) {
        if(a[i].cod == b[j].cod) {
            a[i].pre=b[j].pre;
            i++;
        } else
            j++;
    }
    provo ad eseguire l'exe, non mi crea il file che apro successivamente.. si blocca in questo ciclo.
    Che sapete dirmi?
    Qui vi posto l'intera funzione di aggiornamento del programma, con le varie stampe di verifica.
    codice:
    void Aggiorna_info(Aerei a[],Aggiornamenti b[],char nomefile2[],char nomefile3[]) {
        int n;
        int i;
        int j;
    
        n=Conta_righe(nomefile2);
        printf("Il file degli aumenti e' di %d righe ",n);
    
        j=0;
        i=0;
        while(j<n) {
            if(a[i].cod == b[j].cod) {
                a[i].pre=b[j].pre;
                i++;
            } else
                j++;
        }
    
        FILE* f;
        f=fopen(nomefile3,"w");
        if(f==NULL) {
            printf("errore nell'aperture del file ");
        } else {
            i=0;
            n=Conta_righe(nomefile1);
            while(i<n) {
                fprintf(f,"%s %s %s %s %d %f", a[i].cod, a[i].par, a[i].cit, a[i].arr, a[i].pos, a[i].pre);
                i++;
            }
        }
        fclose(f);
        return;
    }
    Ultima modifica di MItaly; 01-11-2016 a 23:27 Motivo: Tag CODE, indentazione

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Quel ciclo non è corretto ...

    I dati nei file sono ordinati in qualche modo?

    Se non lo sono, come è giusto presupporre, devi cercare ogni elemento della lista degli aggiornamenti in *tutta* la lista dei dati originali.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    L'ordine dei dati è per codice.
    Nel ciclo iniziale controllo che se il dato contenuto in b[j].cod è uguale ad a[i].cod.. se si verifica la condizione allora procedo con l'assegnazione di a[i].pre del valore aggiornato di b[j].pre.
    Quest'assegnazione penso non sia possibile, dato che il programma blocca la sua esecuzione proprio qui.
    In che modo potrei ovviare a questo problema?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Pensa bene .. se lo trovi e assegni il valore il ciclo comunque continua e non va bene ...

    Prova a scrivere su carta cosa succede agli indici i e j nei vari casi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Tag per questa discussione

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.