Funzioni con strutture in c

di il
43 risposte

43 Risposte - Pagina 3

  • Re: Funzioni con strutture in c

    Ok gli errori sulla scanf e printf li ho corretti, sulle strcmp devo impostare il test in modo che se ritorna 0 allora impongo.che gdg è uguale al giorno della settimana?
    In ogni caso se in imput inserisco il gionro i dati della centralina con la data tutti separati da spazio non ho nessun output va semplicemente a capo
  • Re: Funzioni con strutture in c

    Non mi sono spiegato ... a che serve quella strcmp se la variabile

    stringa1

    non è mai usata?
  • Re: Funzioni con strutture in c

    La variabile stringa1 la uso quando chiedo il giorno della settimana poi con la scanf(quella che è sbaglata nel codice di prima) la leggo e poi la strcmp mi serve per assegnare al tipogiorno nella struct che è un enun il giorno della settimana in base al tipo di stringa inserita...è sbagliato?
  • Re: Funzioni con strutture in c

    Dato che la scanf non era completa non si vedeva ...

    Comunque tutte le strcmp sono sbagliate perché devono essere tipo

    if (strcmp(stringa1, "monday")==0)

    e alla fine manca l'assegnazione del valore ottenuto alla struttura passata con

    dati->giornosettimana = gdg;

    Inoltre in questa scanf

    scanf("%s %f %f %f %d %d %d"

    non ci devono essere spazi dopo l'ultimo %d
  • Re: Funzioni con strutture in c

    Scusami se rispondo solo ora ma non avevo il pc a portata di mano...grazie per le indicazioni ho corretto tutto ma credo ci sia un errore nello switch in quanto al posto di stamparmi il giorno escono una serie di caratteri numerici...per il resto dovrebbe andar bene.



    
    #include<stdio.h>
    #include<string.h>
    #define NSERIE 2
    typedef enum{monday,tuesday,wednesday,thursday,friday,saturday,sunday}tipogiorno;
     struct strcentralina{char centr[6];
                          float temperatura;
                          float umidita;
                          float polveri_sottili;
                          int giorno;
                          int mese;
                          int anno;
                          tipogiorno giornosettimana;};
    typedef struct strcentralina centralina;
    
    void leggidati(centralina *dati)
    { tipogiorno gdg;
    char stringa1[15];
    printf("inserire dati rilevazione ovvero giorno della settimana,centralina,umidita',temperatura,polveri e data:\n");
    scanf("%s",stringa1);
    scanf("%s %f %f %f  %d %d %d",&(dati->centr),&(dati->umidita),&(dati->temperatura),&(dati->polveri_sottili),&(dati->giorno),&(dati->mese),&(dati->anno));
    
    if (strcmp(stringa1,"monday")==0)
    gdg=monday;
    else if(strcmp(stringa1,"tuesday")==0)
    gdg=tuesday;
    else if(strcmp(stringa1,"wednesday")==0)
    gdg=wednesday;
    else if(strcmp(stringa1,"thursday")==0)
    gdg=thursday;
    else if(strcmp(stringa1,"friday")==0)
    gdg=friday;
    else if(strcmp(stringa1,"saturday")==0)
    gdg=saturday;
    else if(strcmp(stringa1,"monday")==0)
    gdg=monday;
    dati->giornosettimana=gdg;
    }
    void stampadati(centralina *dati)
    { tipogiorno gdg2;
    dati->giornosettimana=gdg2;
        printf("la data della rilevazione e':%d %d %d %d\n",dati->giornosettimana,dati->giorno,dati->mese,dati->anno);
        switch(gdg2)
        {
            case monday: printf("lunedi'");break;
            case tuesday: printf("martedi'");break;
            case wednesday: printf("mercoledi'");break;
            case thursday: printf("giovedi'");break;
            case friday: printf("venerdi'");break;
            case saturday: printf("sabato");break;
            case sunday: printf("domenica");break;
        }
        printf("la centralina e': %s\n",dati->centr);
        printf("umidita' e temperatura valgono %f e %f C\n",dati->umidita,dati->temperatura);
        printf("concentrazione polveri sottili: %f ug/m3\n",dati->polveri_sottili);
    
    }
    int main (int argc, char** argv)
    {   int i;
        centralina centr1[NSERIE];
        for(i=0;i<NSERIE;i++){
        leggidati(&centr1[i]);}
        for(i=0;i<NSERIE;i++){
        stampadati(&centr1[i]);}
        return 0;
    }
    
  • Re: Funzioni con strutture in c

    Perchè sovrascrivi giornodellasettimana nella funzione stampadati()?
    void stampadati(centralina *dati)
    { tipogiorno gdg2;
    dati->giornosettimana=gdg2;
  • Re: Funzioni con strutture in c

    Anche se non sovrascrivo non stampa correttamente...come dovrei collegare giorno settimana con gdg?credo sia questo il problema
    
    void stampadati(centralina *dati)
    { tipogiorno gdg1;
        printf("la data della rilevazione e':%d %d %d %d\n",dati->giornosettimana,dati->giorno,dati->mese,dati->anno);
        switch(gdg1)
        {
            case monday: printf("lunedi'");break;
            case tuesday: printf("martedi'");break;
            case wednesday: printf("mercoledi'");break;
            case thursday: printf("giovedi'");break;
            case friday: printf("venerdi'");break;
            case saturday: printf("sabato");break;
            case sunday: printf("domenica");break;
        }
    
  • Re: Funzioni con strutture in c

    Ma perché non usi dati->giornosettimana per lo switch?
  • Re: Funzioni con strutture in c

    Non hai ancora capito che le funzioni ricevono e inviano i dati che stai inserendo tramite il parametro

    *dati

    che è un puntatore alla struttura che stai utilizzando.

    Quindi, nel caso della funzione stampadati, il valore che ti interessa e che deve controllare lo switch sta in

    dati->giornosettimana

    perché è in quel posto che l'hai scritto con l'altra funzione.

    La variabile gdg1 NON CONTIENE NULLA di ciò che hai inserito.
  • Re: Funzioni con strutture in c

    Avete perfettamente ragione purtroppo è la prima volta che ho a che fare con le funzioni, comunque ho corretto lo switch ma c'è un ultimo problema ovvero che quando inserisco i dati della data in input per esempio: "monday 23 4 1993"
    in output mi ritorna 0 23 4 1993
    lunedì
    per il resto funziona.
    
    #include<stdio.h>
    #include<string.h>
    #define NSERIE 2
    typedef enum{monday=1,tuesday,wednesday,thursday,friday,saturday,sunday}tipogiorno;
     struct strcentralina{char centr[6];
                          float temperatura;
                          float umidita;
                          float polveri_sottili;
                          int giorno;
                          int mese;
                          int anno;
                          tipogiorno giornosettimana;};
    typedef struct strcentralina centralina;
    
    void leggidati(centralina *dati)
    { tipogiorno gdg;
    char stringa1[15];
    printf("inserire dati rilevazione, ovvero giorno della settimana,centralina,umidita',temperatura,polveri e data:\n");
    scanf("%s",stringa1);
    scanf("%s %f %f %f  %d %d %d",&(dati->centr),&(dati->umidita),&(dati->temperatura),&(dati->polveri_sottili),&(dati->giorno),&(dati->mese),&(dati->anno));
    
    if (strcmp(stringa1,"monday")==0)
    gdg=monday;
    else if(strcmp(stringa1,"tuesday")==0)
    gdg=tuesday;
    else if(strcmp(stringa1,"wednesday")==0)
    gdg=wednesday;
    else if(strcmp(stringa1,"thursday")==0)
    gdg=thursday;
    else if(strcmp(stringa1,"friday")==0)
    gdg=friday;
    else if(strcmp(stringa1,"saturday")==0)
    gdg=saturday;
    else if(strcmp(stringa1,"monday")==0)
    gdg=monday;
    dati->giornosettimana=gdg;
    }
    void stampadati(centralina *dati)
    {
    
        printf("la data della rilevazione e': %d %d %d %d\n",dati->giornosettimana,dati->giorno,dati->mese,dati->anno);
        switch(dati->giornosettimana)
        {
            case monday: printf("lunedi'\n");
            break;
            case tuesday: printf("martedi'\n");
            break;
            case wednesday: printf("mercoledi'\n");
            break;
            case thursday: printf("giovedi'\n");
            break;
            case friday: printf("venerdi'\n");
            break;
            case saturday: printf("sabato\n");
            break;
            case sunday: printf("domenica\n");
            break;
        }
        printf("la centralina e': %s\n",dati->centr);
        printf("umidita' e temperatura valgono %f e %f C\n",dati->umidita,dati->temperatura);
        printf("concentrazione polveri sottili: %f ug/m3\n",dati->polveri_sottili);
    
    }
    int main (int argc, char** argv)
    {   int i;
        centralina centr1[NSERIE];
        for(i=0;i<NSERIE;i++){
        leggidati(&centr1[i]);}
        for(i=0;i<NSERIE;i++){
        stampadati(&centr1[i]);}
        return 0;
    }
    
  • Re: Funzioni con strutture in c

    Ed è normale, visto che nella printf visualizzi

    dati->giornosettimana

    che, forse ancora non l'hai capito, è un numero e per monday nel tuo caso vale 0

    (questo non c'entra con le funzioni, è solo un ragionamento minimo ... forse ti devi impegnare di più ...)
  • Re: Funzioni con strutture in c

    Si le enum sono considerati degli int questo lo so, però non capisco come stampare il giorno al posto del numero...
  • Re: Funzioni con strutture in c

    Purtroppo non ci arrivo è da un giorno che ci penso, quello che so è che i tipi enum possono essere stampati con il placeholder %d che però ti ritorna un numero forse dovrei cambiare i case dello switch con i numeri? non credo ma davvero non mi viene nulla di meglio in mente
  • Re: Funzioni con strutture in c

    Scusa, tu scrivi
    in output mi ritorna 0 23 4 1993
    lunedì
    quindi basta modificare il tuo codice in modo che PRIMA visualizzi lunedì, DOPO tutto il resto SENZA lo 0. Quindi sarebbe

    lunedì
    23 4 1993

    e se non vai a capo nella prima linea

    lunedì 23 4 1993

    Ma non posso pensare che non ci arrivi da solo ...
Devi accedere o registrarti per scrivere nel forum
43 risposte