DOMANDA [C] Problema gestione file

Pubblicità

saro1995

Nuovo Utente
Messaggi
82
Reazioni
3
Punteggio
27
Ciao a tutti ragazzi, sto svolgendo un tema d'esame universitario e la gestione del file mi sta dando problemi. Ovviamente in mancanza del corretto funzionamento del file non posso proseguire perchè tutte le operazioni sucessive dipendono da esso. Confido in voi. Per favore non ditemi a parole la soluzione, magari se è possibile e se non chiedo troppo ditemi come posso risolvere, in codice.
Questo è il codice:

C:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

/*DEFINIZIONE STRUTTURE DATI*/
typedef struct Articolo {
    char codice[7];
    char nome_prodotto[63];
    char genere_alimentare[15];
    float prezzo;
    int quantita;
}TArticolo;

typedef struct NodoArticolo {
    TArticolo info;
    struct NodoArticolo *next;
}TNodoArticolo;
typedef TNodoArticolo* TListaArticoli;

typedef struct GenereAlimentare {
    char genere_alimentare[15];
    int numero_prodotti;
    TListaArticoli elenco_prodotti;
}TGenereAlimentare;

typedef struct NodoGenereAlimentare {
    TGenereAlimentare info;
    struct NodoGenereAlimentare *next;
}TNodoGenereAlimentare;
typedef TNodoGenereAlimentare* TListaGeneri;



/*DEFINIZIONE DI FUNZIONE*/
//FUNZIONE PRINCIPALE MENU'
int menu() {
    int scelta;
    printf("\t--> MENU' PRINCIPALE <--\n\n");
    printf("[1] Carica Articoli\n");
    printf("[2] Modifica Prezzo\n");
    printf("[3] Elimina Articolo\n");
    printf("[4] Copia Prodotti In Lista Generi Alimentari\n");
    printf("[5] Prezzo Medio\n");
    printf("[6] Visualizza Lista Generi Alimentari\n");
    printf("[7] Inserisci Articoli\n"); //funzione aggiuntiva
    printf("[8] Visualizza Lista Articoli\n"); //funzione aggiuntiva
    printf("[9] Esci Dal Programma\n");
    printf("Scelta: ");
    scanf("%d", &scelta);
    while (scelta < 1 || scelta > 9) {
        printf("Scelta non valida, sei pregato di inserire una scelta valida!\n");
        printf("Scelta: ");
        scanf("%d", &scelta);
        return scelta;
    }

    return scelta;
}

//Punto 1
void InserisciArticoliInListaOrdinata(TListaArticoli *lis, TArticolo elem) {
    TListaArticoli prec, curr, newnode;
    if ((newnode = (TListaArticoli)malloc(sizeof(TNodoArticolo))) == NULL) {
        printf("Errore nell'allocazione della memoria.\n");
        exit(1);
    }
    newnode->info = elem;
    prec = NULL;
    curr = *lis;
    while (curr != NULL && strcmp(curr->info.codice, elem.codice) < 0) {
        prec = curr;
        curr = curr->next;

    }
    newnode->next = curr;
    if (prec != NULL) {
        prec->next = newnode;
    }
    else {
        *lis = newnode;
    }
}

int CaricaArticoli(char *nomefile, TListaArticoli *plis) {
    FILE *f;
    TArticolo articolo;
    int numero_articoli = 0;
    if ((f = fopen(nomefile, "r")) == NULL) {
        printf("Errore nell'apertura del file.\n");
        exit(1);

    }
    *plis = NULL;
    while (!feof(f)) {
        fscanf(f, "%s", articolo.codice);
        fgets(articolo.nome_prodotto, sizeof(articolo.nome_prodotto), f);
        fgets(articolo.genere_alimentare, sizeof(articolo.genere_alimentare), f);
        articolo.genere_alimentare[strlen(articolo.genere_alimentare) - 1] = '0';
        fscanf(f, "%.2f\t", &articolo.prezzo);
        fscanf(f, "%d\n", &articolo.quantita);

        InserisciArticoliInListaOrdinata(plis, articolo);
        numero_articoli++;
    }
    fclose(f);
    return numero_articoli;
    
}


void StampaListaArticoli(TListaArticoli lis) {
    int i;
    
    for (i = 0; i < lis; i++) {
        printf("Articolo N. %d\n", i + 1);
        printf("- Codice: %s\n", lis->info.codice);
        printf("\n- Nome Prodotto: %s\n", lis->info.nome_prodotto);
        printf("- Genere Alimentare: %s\n", lis->info.genere_alimentare);
        printf("\n- Prezzo: %.2f\t", lis->info.prezzo);
        printf("Quantita': %d\n", lis->info.quantita);
        printf("--------------------->\n");
        lis = lis->next;
    }
}




/*FUNZIONE PRINCIPALE MAIN*/
int main(void) {
    TListaArticoli lista_articolo = NULL;
    TListaGeneri lista_generi = NULL;
    char nomefile[64];
    int scelta, n;
    while (scelta = menu()) {
        switch (scelta) {
        case 1:
            system("CLS");
            printf("\t---> Funzione di caricamento da file <---\n\n");
            printf("Inserisci il nome del file da cui caricare gli articoli: ");
            scanf("%s", nomefile);
            n = CaricaArticoli(nomefile, &lista_articolo);
            printf("Sono stati caricati %d articoli\n", n);
            StampaListaArticoli(lista_articolo);
            system("PAUSE");
            break;
        case 2:
            system("CLS");

            system("PAUSE");
            break;
        case 3:
            system("CLS");

            system("PAUSE");
            break;
        case 4:
            system("CLS");

            system("PAUSE");
            break;
        case 5:
            system("CLS");

            system("PAUSE");
            break;
        case 6:
            system("CLS");

            system("PAUSE");
            break;
        case 7:
            system("CLS");

            system("PAUSE");
            break;
        case 8:
            system("CLS");

            system("PAUSE");
            break;
        case 9:
            system("CLS");
            printf("Grazie per aver utilizzato questo programma <3\n");
            return 0;
            system("PAUSE");
            break;

        }
    }




    return 0;
}
 
System("PAUSE") su un compito universitario? :patpat: AAAAAAAAAARRGGGGHHHH
Se lo fai davvero poi non ti meravigliare se ti bocciano anche se sulla carta funziona tutto... :mad:
 
Questo sistema del system "cls" e system pause lho visto fare in un video su Youtube. Comunque adesso che lo so uso il ciclo do while. Ragazzi avete visionato il file?
 
Questo sistema del system "cls" e system pause lho visto fare in un video su Youtube. Comunque adesso che lo so uso il ciclo do while. Ragazzi avete visionato il file?
Ancora non ci hai spiegato che errore ti da....
Com'è strutturato il file che dai in input? Dove sta il main?
 
Ancora non ci hai spiegato che errore ti da....
Com'è strutturato il file che dai in input? Dove sta il main?
IL file non carica come dovrebbe caricare. Per esempio: Se inserisco 4 articoli me ne ritorna 8, ovvero come se ne legge 8. Scusa avete ragione ho dimenticato di mettere la struttura del file. Come detto, in questo file ci stanno 4 prodotti e a me ne ritorna 8 quindi ci sta qualcosa di sbagliato nella funzione del caricamento file. Mentre ci sei, per favore e se non chiedo troppo, vorrei sapere perchè è sbagliato mettere system("pause"), grazie mille per il tuo aiuto lo apprezzo tantissimo.
0000001
Acqua Naturale
Bibite
0.30 200

0000012
Coca cola
Bibite
1.00 100

0000031
Biscotti ai cereali
Dolci
3.50 300

0001070
Zucchine
Frutta e verdura
1.50 50
 
IL file non carica come dovrebbe caricare. Per esempio: Se inserisco 4 articoli me ne ritorna 8, ovvero come se ne legge 8. Scusa avete ragione ho dimenticato di mettere la struttura del file. Come detto, in questo file ci stanno 4 prodotti e a me ne ritorna 8 quindi ci sta qualcosa di sbagliato nella funzione del caricamento file. Mentre ci sei, per favore e se non chiedo troppo, vorrei sapere perchè è sbagliato mettere system("pause"), grazie mille per il tuo aiuto lo apprezzo tantissimo.
0000001
Acqua Naturale
Bibite
0.30 200

0000012
Coca cola
Bibite
1.00 100

0000031
Biscotti ai cereali
Dolci
3.50 300

0001070
Zucchine
Frutta e verdura
1.50 50
Innanzitutto togli quei system pause che sono chiamate molto onerose.
Poi metti delle printf che fungono da log per capire cosa fa la funziona carica e se legge effettivamente 4 articoli
 
ho tolto il system pause e adesso e ho proceduto con il ciclo do while. Comunque cosa intendi " con delle printf che fungono da log " ? Mostrami un esempio in codice se puoi pls
 
ho tolto il system pause e adesso e ho proceduto con il ciclo do while. Comunque cosa intendi " con delle printf che fungono da log " ? Mostrami un esempio in codice se puoi pls
nella chiamata caricafile, all'interno del ciclo, stampa gli articoli che prendi e vedi cosa ti da
 
Pubblicità
Pubblicità
Indietro
Top