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++;
}}
}
}