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:
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");} 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; }
la differenza sta solo in questo pezzo: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; }
ecodice: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++;
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++; }} } }

Rispondi quotando