Ciao a tutti ragazzi, mi potreste aiutare con il mio problema?
Sto eseguendo un compito con liste di liste, ma non riesco a stampare i file dopo la carica.
Di seguito posto il codice.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define C 9
#define N 16
#define D 32
//definizioni strutture
typedef struct{
char cliente [C];
char nome[N];
int numero_ordine;
int numero_pezzi;
}TAtomo_ordini;
typedef struct elem_lista_ordini{
TAtomo_ordini dato;
struct elem_lista_ordini *succ;
}ELista_ordini,*TLista_ordini;
typedef struct{
int codice;
char descrizione [D];
float costo;
TLista_ordini lista_ordini;
}TAtomo_prodotti;
typedef struct elem_lista_prodotti{
TAtomo_prodotti dato;
struct elem_lista_prodotti *succ;
}ELista_prodotti,*TLista_prodotti;
//dichiarazioni funzioni
int null_ordini(TLista_ordini);
int null_prodotti(TLista_prodotti);
void cons_ordini(TLista_ordini *,TAtomo_ordini);
void cons_prodotti(TLista_prodotti *,TAtomo_prodotti);
TAtomo_ordini car_ordini(TLista_ordini);
void insord_ordini(TLista_ordini *,TAtomo_ordini);
TLista_prodotti cerca_cod_prodotto(TLista_prodotti,int);
void carica_prodotti(TLista_prodotti *);
void carica_ordini(TLista_prodotti);
void stampa_prodotti_ordini(TLista_prodotti,TAtomo_ordini);
void main(void) {
int x;
TLista_prodotti lp;
TAtomo_ordini ordini;
printf("\n******MENU******\n\n");
printf("1.Carica file ordini e prodotti\n");
printf("2.Stampa file ordini e prodotti\n");
printf("3.Calcola cifra totale per ogni cliente\n");
printf("4.Evasione ordine\n\n");
printf("\nFare una scelta (1-4): ");
scanf("%d",&x);
if(x<5&&x>=0){
switch(x){
case 1: {
carica_prodotti(&lp);
carica_ordini(lp);
}
break;
case 2:
stampa_prodotti_ordini(lp,ordini);
break;
case 3:
break;
case 4:
break;
}
}
else
printf("\n\nErrore scelta\n\n");
system("PAUSE");
}
int null_ordini(TLista_ordini l){
return(l==NULL);
}
int null_prodotti(TLista_prodotti l){
return(l==NULL);
}
void cons_ordini(TLista_ordini *l,TAtomo_ordini e){
TLista_ordini tmp;
tmp=(TLista_ordini)malloc(sizeof(ELista_ordini));
if(tmp==NULL) return;
tmp->dato=e;
tmp->succ=*l;
*l=tmp;
}
void cons_prodotti(TLista_prodotti *l,TAtomo_prodotti e){
TLista_prodotti tmp;
tmp=(TLista_prodotti)malloc(sizeof(ELista_prodotti));
if(tmp==NULL) return;
tmp->dato=e;
tmp->succ=*l;
*l=tmp;
}
TAtomo_ordini car_ordini(TLista_ordini l){
if(!null_ordini(l)){
return(l->dato);
}
}
void insord_ordini(TLista_ordini *l,TAtomo_ordini e){
if(null_ordini(*l)||car_ordini(*l).numero_ordine>e.numero_ordine)
cons_ordini(l,e);
else
insord_ordini(&(*l)->succ,e);
}
TLista_prodotti cerca_cod_prodotto(TLista_prodotti l,int cod_prodotto){
while(!null_prodotti(l)){
if(l->dato.codice ==cod_prodotto) break;
l=l->succ;
}
return l;
}
void carica_prodotti(TLista_prodotti *l){
FILE *fp;
TAtomo_prodotti tmp;
fp=fopen("prodotti.txt","r");
if(fp!=NULL){
while(fscanf(fp,"%d\n",&tmp.codice)!=EOF){
fgets(tmp.descrizione,D,fp);
fscanf(fp,"%f\n",&tmp.costo);
tmp.lista_ordini=NULL;
cons_prodotti(l,tmp);
}
}
else
printf("Errore carica file prodotti");
fclose(fp);
printf("\n\nCaricamento prodotti ultimato\n\n");
}
void carica_ordini(TLista_prodotti l){
FILE *fp;
TAtomo_ordini tmp;
int cod;
TLista_prodotti p;
fp=fopen("ordini.txt","r");
if(fp!=NULL){
while(fscanf(fp,"%d\n",&cod)!=EOF){
fgets(tmp.cliente,C,fp);
tmp.cliente[strlen(tmp.cliente)-1]='\0';
fgets(tmp.nome,N,fp);
fscanf(fp,"%d\n",&tmp.numero_ordine);
fscanf(fp,"%d\n",&tmp.numero_pezzi);
p=cerca_cod_prodotto(l,cod);
if(p==NULL)
printf("Prodotto nn trovato\n");
else
insord_ordini(&(p->dato.lista_ordini),tmp);
}
fclose(fp);
printf("Caricamento ordini ultimato\n\n");
}
}
void stampa_prodotti_ordini(TLista_prodotti l,TAtomo_ordini e){
while(!null_prodotti(l)){
TLista_ordini p2;
printf("Prodotto:\n");
printf("Codice prodotto:%d\n",l->dato.codice);
printf("Codice cliente:%s\n",l->dato.descrizione);
printf("Costo:%f\n",l->dato.costo);
p2=l->dato.lista_ordini;
while(!null_ordini(p2)){
printf("Codice cliente:%s\n",e.cliente);
printf("Cognome e nome del cliente:%s\n",e.nome);
printf("Numero ordine:%d\n",e.numero_ordine);
printf("Numero pezzi:%d\n",e.numero_pezzi);
p2=p2->succ;
}
l=l->succ;
}
}