Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    problema file while (fgetc=!NULL) [C]

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

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: problema file while (fgetc=!NULL) [C]

    Originariamente inviato da fabio pastorino

    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]);
    Ad ogni iterazioni fgets la chiami due volte.. In pratica perdi metà degli elementi..
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.