questo è il mio programma...se metto for (f=0;f<n && !feof (fp);f++) nella funzione fget_point_mass , la lettura si ferma e questo va bene...però la funzione fwrite_point_mass utilizzando anchessa un ciclo continua a stampare...se metto for (f=0;f<n && !feof (fp);f++) in fwrite_point_mass il prompt mi da errore...cosa dovrei fare secondo voi??

codice:
#include <stdio.h>
#include <stdlib.h>

#define DIM_LOC 3
#define N_MAX 10

int fget_point_mass (int n, int mat[][DIM_LOC], int vet[]);
void center_grav (int n, int mat[][DIM_LOC], int vet[], float &cx, float &cy, float &cz);
void fwrite_point_mass (int n, int mat[][DIM_LOC], int vett_masse[], float cx, float cy, float cz);

int main (void)
{ 
   
   int vett_masse[N_MAX];
   int mat[N_MAX][DIM_LOC];
   int f,n;

   float cx = 0, cy = 0, cz = 0;

   n = fget_point_mass (n, mat, vett_masse);

   if (!n)
      {
      system ("pause");
      return 0;
      }

   center_grav (n, mat, vett_masse, cx, cy, cz);

   fwrite_point_mass(n, mat, vett_masse, cx, cy, cz);

   system("pause");
   return(0);
}


//Definizione funzioni
int fget_point_mass(int n, int mat[][DIM_LOC], int vet[])
{
   int f;
   FILE *fp; 
   char s [30];
   
   fp = fopen ("points.dat","r");
    if (fp == NULL)  
       {
       printf ("File di database non trovato, nessun dato caricabile.\n");
       return 0;
       }
    
   /* Leggi la prima riga (n = numero di elementi) */
   fgets (s,30,fp); 
   sscanf (s,"%d",&n); 
   if ((n < DIM_LOC)||(n > N_MAX))
     { 
     printf    (" E' presente un errore. Controllare il file di input.\n");
     return 0;
     }
  
   /*Leggi la matrice della locazione + la massa*/
   for (f=0;f<n;f++) 
      { 
      fgets (s,30,fp); 
      sscanf (s,"%d %d %d %d\r\n", &mat[f][0],&mat[f][1],&mat[f][2],&vet[f]); 
      }
 return n;
}


void center_grav (int n, int mat[][DIM_LOC], int vet[], float &cx, float &cy, float &cz)
{
   int f;
   float totmasse = 0;
   float c1 = 0,  c2 = 0,  c3= 0;

   for (f = 0; f < n; f++)       {
      totmasse = totmasse + vet[f];
      c1 = c1 + (vet[f] * mat[f][0]);
      c2 = c2 + (vet[f] * mat[f][1]);
      c3 = c3 + (vet[f] * mat[f][2]);
      }
   cx = (1/totmasse)*(c1);
   cy = (1/totmasse)*(c2);
   cz = (1/totmasse)*(c3);
}

void fwrite_point_mass (int n, int mat[][DIM_LOC], int vett_masse[], float cx, float cy, float cz)
{
   int f;
     
    /*Stampa la locazione*/
   printf    (" Locazione:\n");
   for (f=0;f<n;f++)       printf ("               %d %d %d \n\n", mat[f][0],mat[f][1],mat[f][2]);

   /*Stampa la massa*/
   printf    (" Masse:\n\n");
   for (f=0;f<n;f++)       printf ("               %d\n\n", vett_masse[f]);

   /* Stampare il numero n */
   printf (" n:\n               %d\n\n", n);
   
   /*Stampa in centro di gravità*/
   printf ("Il centro di gravita' C e' ( %.3f, %.3f, %.3f )\n\n" , cx, cy, cz );
}