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:
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;
}