Visualizzazione dei risultati da 1 a 5 su 5

Discussione: problema FILE [c]

  1. #1

    problema FILE [c]

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

    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.

    ho scritto printf("uno") due e tre per vedere quando si blocca il programma e si blocca sempre dopo il 2 ma non capisco il motivo! qualche suggerimento?? grazie in anticipo
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define L 29
    #define soglia 50
    int main()
    {
    
    
    FILE*ff;
    ff=fopen("aree.txt","w");
    if(ff==NULL){
        printf("Errore scrittura");
    }
    printf("uno");
    
     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<2;i++){
    gets(st);
    fprintf(ff,"%s",st);}
    
    fclose(ff);
    
     printf("due");
    
    ff=fopen("aree.txt","r");
    if(ff==NULL){
        printf("Errore lettura");
    
         printf("tre");
    
    while(fgets(s,28,ff)!=NULL){
    fgets(s,28,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 con altezza maggiore a %d: %d\n",soglia,maggu);
    
        return 0;
    }
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Cerca di indentare bene il codice e usa i tag CODE per presentarlo altrimenti non si capisce nulla e rischi di scrivere in modo sbagliato. Ad esempio nel tuo codice appare

    codice:
    if(ff==NULL){
       printf("Errore lettura");
    
       printf("tre");
    
       while(fgets(s,28,ff)!=NULL){
    e questo vuol dire che la while sta all'interno della if (e quindi non sarà mai eseguita se il file viene aperto).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Originariamente inviato da oregon
    Cerca di indentare bene il codice e usa i tag CODE per presentarlo altrimenti non si capisce nulla e rischi di scrivere in modo sbagliato. Ad esempio nel tuo codice appare

    codice:
    if(ff==NULL){
       printf("Errore lettura");
    
       printf("tre");
    
       while(fgets(s,28,ff)!=NULL){
    e questo vuol dire che la while sta all'interno della if (e quindi non sarà mai eseguita se il file viene aperto).
    ok! un'altra domanda: scrivere if (v[j]=='V') è corretto per scrivere se v[j] è uguale a V?
    Non ho capito molto bene quando ci vogliono gli apici e quando non ci vogliono!
    e ad esempio per scrivere che qualcosa è diverso da NULL NULL va con gli apici o senza?

  4. #4
    Originariamente inviato da fabio pastorino
    ok! un'altra domanda: scrivere if (v[j]=='V') è corretto per scrivere se v[j] è uguale a V?
    Non ho capito molto bene quando ci vogliono gli apici e quando non ci vogliono!
    V senza apici si riferisce ad una qualche variabile/costante/... dichiarata da qualche parte con nome V; 'V' con apici è il carattere (literal) V.
    e ad esempio per scrivere che qualcosa è diverso da NULL NULL va con gli apici o senza?
    NULL è il nome di una costante, quindi va senza apici.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da fabio pastorino
    ok! un'altra domanda
    In genere si apre un altro thread ... in un forum una domanda - un thread.

    scrivere if (v[j]=='V') è corretto per scrivere se v[j] è uguale a V?
    'V' indica un carattere --- se v[j] è un tipo di dato char, allora va bene

    Non ho capito molto bene quando ci vogliono gli apici e quando non ci vogliono!
    Per questo dovrai studiare ancora la differenza tra char e array di char

    e ad esempio per scrivere che qualcosa è diverso da NULL NULL va con gli apici o senza?
    NULL è una costante numerica (in genere vale 0) e quindi va usata senza apici
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.