devo creare un file con scritto su ogni riga una zona e un numero
le zone sono V U F.

esempio file:

V 23 F 78 U 32 F 67
V 43 U 234 F 67 V 19

dopo averlo creato devo leggerlo dicendo quante volte compare una zona, la media di ogni zona.
non riesco a capire perchè il programma fatto cosi funziona:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define L 29
#define soglia 50
#define numrighe 2
int main()
{
FILE*ff;
ff=fopen("aree.txt","w");
if(ff==NULL){
    printf("Errore scrittura");
}


 char st[L],s[L];
 char v[4];
 int w[4];
 int i,j;
 int contv=0,contf=0,contu=0;
 int sommav=0,sommaf=0,sommau=0;
 int medv=0,medf=0,medu=0;
 int maggu=0;

for(i=0;i<numrighe;i++){
gets(st);
fprintf(ff,"%s\n",st);}

fclose(ff);




ff=fopen("aree.txt","r");
if(ff==NULL){
    printf("Errore lettura");}


int k=0;
while(k<numrighe){
fgets(s,31,ff);
sscanf(s,"%c %d %c %d %c %d %c %d",&v[0],&w[0],&v[1],&w[1],&v[2],&w[2],&v[3],&w[3]);



for(j=0;j<4;j++){
    if(v[j]=='V'){
            contv++;
            sommav=w[j]+sommav;
        }
    if(v[j]=='F'){
            contf++;
            sommaf=w[j]+sommaf;
    }
    if(v[j]=='U'){
            contu++;
            sommau=w[j]+sommau;
            if(w[j]>soglia){
                    maggu++;
            }}



} k++;
}
fclose(ff);
 printf("quattro");
medv=sommav/contv;
medf=sommaf/contf;
medu=sommau/contu;

printf("numero ettari Verdi:%d\n",contv);
printf("numero ettari Fluviali:%d\n",contf);
printf("numero ettari Urbani:%d\n\n",contu);

printf("altezza media Verde:%d \n",medv);
printf("altezza media Fluviale:%d\n",medf);
printf("altezza media Urbana:%d\n\n",medu);


printf("numero aree urbane con altezza maggiore a %d: %d\n",soglia,maggu);

    return 0;
}
mentre cosi non funziona:

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

#define L 29
#define soglia 50
#define numrighe 2
int main()
{
FILE*ff;
ff=fopen("aree.txt","w");
if(ff==NULL){
    printf("Errore scrittura");
}


 char st[L],s[L];
 char v[4];
 int w[4];
 int i,j;
 int contv=0,contf=0,contu=0;
 int sommav=0,sommaf=0,sommau=0;
 int medv=0,medf=0,medu=0;
 int maggu=0;

for(i=0;i<numrighe;i++){
gets(st);
fprintf(ff,"%s\n",st);}

fclose(ff);




ff=fopen("aree.txt","r");
if(ff==NULL){
    printf("Errore lettura");}



while(fgets(s,31,ff)!=NULL){
fgets(s,31,ff);
sscanf(s,"%c %d %c %d %c %d %c %d",&v[0],&w[0],&v[1],&w[1],&v[2],&w[2],&v[3],&w[3]);



for(j=0;j<4;j++){
    if(v[j]=='V'){
            contv++;
            sommav=w[j]+sommav;
        }
    if(v[j]=='F'){
            contf++;
            sommaf=w[j]+sommaf;
    }
    if(v[j]=='U'){
            contu++;
            sommau=w[j]+sommau;
            if(w[j]>soglia){
                    maggu++;
            }}



}
}
fclose(ff);
 printf("quattro");
medv=sommav/contv;
medf=sommaf/contf;
medu=sommau/contu;

printf("numero ettari Verdi:%d\n",contv);
printf("numero ettari Fluviali:%d\n",contf);
printf("numero ettari Urbani:%d\n\n",contu);

printf("altezza media Verde:%d \n",medv);
printf("altezza media Fluviale:%d\n",medf);
printf("altezza media Urbana:%d\n\n",medu);


printf("numero aree urbane con altezza maggiore a %d: %d\n",soglia,maggu);

    return 0;
}
la differenza sta solo in questo pezzo:

codice:
int k=0;
while(k<numrighe){
fgets(s,31,ff);
sscanf(s,"%c %d %c %d %c %d %c %d",&v[0],&w[0],&v[1],&w[1],&v[2],&w[2],&v[3],&w[3]);



for(j=0;j<4;j++){
    if(v[j]=='V'){
            contv++;
            sommav=w[j]+sommav;
        }
    if(v[j]=='F'){
            contf++;
            sommaf=w[j]+sommaf;
    }
    if(v[j]=='U'){
            contu++;
            sommau=w[j]+sommau;
            if(w[j]>soglia){
                    maggu++;
            }}



} k++;
e

codice:
while(fgets(s,31,ff)!=NULL){
fgets(s,31,ff);
sscanf(s,"%c %d %c %d %c %d %c %d",&v[0],&w[0],&v[1],&w[1],&v[2],&w[2],&v[3],&w[3]);



for(j=0;j<4;j++){
    if(v[j]=='V'){
            contv++;
            sommav=w[j]+sommav;
        }
    if(v[j]=='F'){
            contf++;
            sommaf=w[j]+sommaf;
    }
    if(v[j]=='U'){
            contu++;
            sommau=w[j]+sommau;
            if(w[j]>soglia){
                    maggu++;
            }}



}
}