Eccovi il codice
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!

Mi spiego: se la riga che ho sottolineato NON la scrivo il programma vedo che parte bene, vale a dire fa il primo ciclo e mi stampa i punteggi con solo le prime due squadre prese.
Ma se scrivo quella riga non so perchè ma mi si annulla la lista e non mi stampa neanche le prime due squadre! Come mai?

AGGIORNAMENTO
Se faccio una printf di classi->squadra dentro l'if(il==NULL) del main il programma parte, altrimenti se la faccio fuori dal main il programma crasha. Come mai?