codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct classifica* classific;
struct classifica{
char* squadra;
int punti;
classific succ;
};
typedef struct punteggi* squadre;
struct punteggi{
char* casa;
char* ospite;
int goalc;
int goalo;
squadre next;
};
squadre inseriscicoda(squadre il, char* casa, char* ospite, int goalc, int goalo,classific* classi);
classific creapunteggio(squadre il,classific classi);
void stampasquadre(squadre il);
classific inseriscicodapunteggi(classific classi, int m, char* ospite);
void stampapunteggi(classific classi);
int main(int argc, char *argv[])
{
squadre il; classific classi;
il=NULL; classi=NULL;
char* squadra; char* squadradue; int goal; int goaldue; squadra=malloc(sizeof(char)*256); squadradue=malloc(sizeof(char)*256);
FILE* fp;
fp=fopen("squadre.txt","r");
if(fp==NULL){
printf("Errore nell'aperture del file\n"); return 0;}
while(!feof(fp))
{
fscanf(fp,"%256[^ ] %256[^ ] %d %d\n",squadra,squadradue,&goal,&goaldue);
if(il!=NULL){
classific t=classi;
il=inseriscicoda(il,squadra,squadradue,goal,goaldue,&t);
classi=t;}
if (il==NULL)
{
il=malloc(sizeof(struct punteggi));il->next=NULL;
il->casa=malloc(sizeof(char)*256); il->ospite=malloc(sizeof(char)*256);
strcpy(il->casa,squadra); strcpy(il->ospite,squadradue); il->goalc=goal; il->goalo=goaldue;
classi=creapunteggio(il,classi);
}
}
stampasquadre(il);
stampapunteggi(classi);
system("PAUSE");
return 0;
}
squadre inseriscicoda(squadre il, char* casa, char* ospite, int goalc, int goalo,classific* classi)
{
if(il==NULL) return il;
squadre t=il;
while(t->next!=NULL) t=t->next;
squadre nuovo; nuovo=malloc(sizeof(struct punteggi)); nuovo->next=NULL;
nuovo->casa=malloc(sizeof(char)*256); nuovo->ospite=malloc(sizeof(char)*256);
strcpy(nuovo->casa,casa);strcpy(nuovo->ospite,ospite);nuovo->goalc=goalc;nuovo->goalo=goalo;
if(*classi!=NULL){*classi=creapunteggio(nuovo,classi);}
t->next=nuovo;
return il;}
classific creapunteggio(squadre il,classific classi)
{
int x=3;int y=0; int z=1;
if (classi==NULL){
classi=malloc(sizeof(struct classifica)); classi->succ=NULL;
classi->squadra=malloc(sizeof(char)*256); strcpy(classi->squadra,il->casa);
if(il->goalc < il->goalo){
classi->punti=y;
classi->succ=inseriscicodapunteggi(classi,x,il->ospite);return classi;}
else if(il->goalc > il->goalo) {classi->punti=x; classi->succ=inseriscicodapunteggi(classi,y,il->ospite); return classi;}
else {classi->punti=z;classi->succ=inseriscicodapunteggi(classi,z,il->ospite); return classi;}
if(classi!=NULL){printf("ciao\n");return classi;}
/*else {classific t=classi; classific m=NULL; classific nuovo=malloc(sizeof(struct classifica));
while(t!=NULL && strcmp(t->squadra,il->casa)!=0)
{
m=t;
t=t->succ;}
if (t==NULL){
nuovo->squadra=malloc(sizeof(char)*256); strcpy(nuovo->squadra,il->casa);
if(il->goalc < il->goalo){
nuovo->punti=y; m->succ=nuovo; inseriscicodapunteggi(&nuovo,x,il->ospite); return t;}
else if(il->goalc > il->goalo) {nuovo->punti=x; m->succ=nuovo; inseriscicodapunteggi(&nuovo,y,il->ospite); return t;}
else {nuovo->punti=z;m->succ=nuovo; inseriscicodapunteggi(&nuovo,z,il->ospite); return t;}
}*/
}}
classific inseriscicodapunteggi(classific classi, int m, char* ospite)
{
classific nuovo=malloc(sizeof(struct classifica));
nuovo->squadra=malloc(sizeof(char)*256); strcpy(nuovo->squadra,ospite);
nuovo->punti=m;
nuovo->succ=NULL; return nuovo;}
void stampasquadre(squadre il)
{
printf("Le squadre sono\n");
while(il!=NULL){
printf("%s->%s->%d->%d\n",il->casa,il->ospite,il->goalc,il->goalo);
il=il->next;}}
void stampapunteggi(classific classi)
{
printf("\nI punteggi delle squadre sono:\n");
while(classi!=NULL)
{
printf("%s->%d\n",classi->squadra,classi->punti);
classi=classi->succ;}}
lasciando perdere la parte che ho messo sotto commento, il problema sussiste nel fatto che la lista riferita ai punteggi delle squadre si annulla sempre!