Funzioni con strutture in c

di il
43 risposte

43 Risposte - Pagina 2

  • Re: Funzioni con strutture in c

    Il main andava scritto così
    int main (int argc, char** argv)
    {   int i;
        centralina centr[NSERIE];
        
        for(i=0;i<NSERIE;i++)
    	    leggidati(&centr[i]);
    	    
        for(i=0;i<NSERIE;i++)
        	stampadati(&centr[i]);
        
        return 0;
    }
    Provalo, poi prosegui impostando temporaneamente NSERIE a 1 per evitare perdite di tempo ad ogni prova.
    Ora, il passo successivo è aggiungere gli altri parametri della centralina, tutti tranne il giorno della settimana, che aggiungerai solo alla fine, all'ultimo passo.
  • Re: Funzioni con strutture in c

    
    #include<stdio.h>
    #include<string.h>
    #define NSERIE 2
     struct strcentralina{char centr[6];
                          float temperatura;
                          float umidita;
                          float polveri_sottili;
                          int giorno;
                          int mese;
                          int anno;};
    typedef struct strcentralina centralina;
    
    void leggidati(centralina *dati)
    {
    printf("inserire dati rilevazione:");
    scanf("%s %f %f %f %d %d %d",&(dati->centr),&(dati->umidita),&(dati->temperatura),&(dati->polveri_sottili),&(dati->giorno),&(dati->mese),&(dati->anno));
    }
    void stampadati(centralina *dati)
    {
        printf("la data della rilevazione e': %d %d %d\n",dati->giorno,dati->mese,dati->anno);
        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;
    }
    
    fatto! in effetti il main scritto così è molto più funzionale
  • Re: Funzioni con strutture in c

    Ora ti rimane solo il problema del giorno della settimana ma hai già fatto il 90% dell'esercizio.
    Qui devi riflettere su come vuoi far inserire la stringa (dal testo dell'esercizio sembra che tu lo debba inserire come stringa, in inglese), come lo vuoi salvare nella struttura (suggerisco un intero o una enum, ma puoi anche salvare la stringa che ti viene data in input) e poi come lo devi stampare (dal testo sembra una stringa, in italiano).
    Anche in questo caso devi ragionare a passi: prima leggo e lo salvo nella struttura, se è un intero poi stampo l'intero (se è una stringa stampo una stringa); se questo funziona, al passo successivo mi occupo di stampare una stringa in italiano al posto dell'intero (o enum o stringa).
  • Re: Funzioni con strutture in c

    Ho un dubbio:
    
    typedef enum{monday,tuesday,wednesday,thurday,friday,saturday,sunday}tipogiorno;
     struct strcentralina{char centr[6];
                          float temperatura;
                          float umidita;
                          float polveri_sottili;
                          int giorno;
                          int mese;
                          int anno;
                          tipogiorno giorno_della_settimana;};
    typedef struct strcentralina centralina;
    
    se nella struct ho un enum come faccio a leggere una stringa e salvarla nel giorno della settimana?
  • Re: Funzioni con strutture in c

    Suggerimento: leggi la stringa e con una serie di if confronti se é "Sunday" allora ... se é "Monday" allora ...
  • Re: Funzioni con strutture in c

    
    #include<stdio.h>
    #include<string.h>
    #define NSERIE 2
    typedef enum{monday,tuesday,wednesday,thurday,friday,saturday,sunday}tipogiorno;
     struct strcentralina{char centr[6];
                          float temperatura;
                          float umidita;
                          float polveri_sottili;
                          int giorno;
                          int mese;
                          int anno;
                          char tipogiorno[15];};
    typedef struct strcentralina centralina;
    
    void leggidati(centralina *dati)
    {
    printf("inserire dati rilevazione:");
    scanf("%s %f %f %f  %d %d %d %s",&(dati->centr),&(dati->umidita),&(dati->temperatura),&(dati->polveri_sottili),&(dati->giorno),&(dati->mese),&(dati->anno),&(dati->tipogiorno));
    }
    void stampadati(centralina *dati)
    {
        printf("la data della rilevazione e':%s %d %d %d\n",dati->tipogiorno,dati->giorno,dati->mese,dati->anno);
        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;
    }
     
    per salvare la stringa mi viene in mente solo di definre una stringa nella struttura...l'if mi serve per cambiarla da inglese ad italiano no?
  • Re: Funzioni con strutture in c

    Supponi di voler mettere nella struttura un int che vale 1 per Sunday, 2 per Monday ...
  • Re: Funzioni con strutture in c

    Non capisco...ma l'enum in sè non è già un int in cui i valori all'interno sono monday=1, tuesday=2 etc...?
  • Re: Funzioni con strutture in c

    Lascia stare la enum, supponi di scrivere un int nella struct. A seconda della stringa inserita setto tale intero a 1 se la stringa inserita é "Sunday" , 2 se la stringa inserita é "Monday"...
    Ti ho dato già troppi suggerimenti; rileggi tutto e rifletti!
  • Re: Funzioni con strutture in c

    Niente non ci arrivo perchè in primis non capisco dove e come inserire la stringa e secondo non so come spostarla nella struttura tramite un int...e la prima volta che provo a compilare un programma con delle funzioni e strutture da solo certi meccanismi non ce li ho...
  • Re: Funzioni con strutture in c

    Nella struct devo salvare per forza un enum ho provato ad usare la funzione strcmp nella funzione leggi dati e uno switch case nella funzione stampa dati per convertire da inglese ad italiano ma qualcosa non va anche se il compilatore non segnala errori...
    
    #include<stdio.h>
    #include<string.h>
    #define NSERIE 10
    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",);
    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"))
    gdg=monday;
    else if(strcmp(stringa1,"tuesday"))
    gdg=tuesday;
    else if(strcmp(stringa1,"wednesday"))
    gdg=wednesday;
    else if(strcmp(stringa1,"thursday"))
    gdg=thursday;
    else if(strcmp(stringa1,"friday"))
    gdg=friday;
    else if(strcmp(stringa1,"saturday"))
    gdg=saturday;
    else if(strcmp(stringa1,"monday"))
    gdg=monday;
    }
    void stampadati(centralina *dati)
    { tipogiorno giornosettimana=monday;
        printf("la data della rilevazione e':%d %d %d %d\n",dati->giornosettimana,dati->giorno,dati->mese,dati->anno);
        switch(giornosettimana)
        {
            case monday: printf("lunedi'",dati->giornosettimana);break;
            case tuesday: printf("martedi'",dati->giornosettimana);break;
            case wednesday: printf("mercoledi'",dati->giornosettimana);break;
            case thursday: printf("giovedi'",dati->giornosettimana);break;
            case friday: printf("venerdi'",dati->giornosettimana);break;
            case saturday: printf("sabato",dati->giornosettimana);break;
            case sunday:printf("domenica",dati->giornosettimana);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;
    }
    
    secondo me il problema sta nel legare la stringa con l'enum ma non so come fare, dovrei fare una specie di casting?
  • Re: Funzioni con strutture in c

    Cosa succede in esrcuzione? stampa sempre lunedì? Hai controllato bene cosa restituiscecla funzione strcmp?
  • Re: Funzioni con strutture in c

    In esecuzione mi fa inserire i primi dati tramite la printf e poi non succede nulla mi fa andare a capo senza altre richieste...l'errore è nella strcmp?
  • Re: Funzioni con strutture in c

    Facci un esempio di input e mostraci il relativo output. Comunque strcmp ritorna 0 se le due stringhe uguali pertanto i test che hai scritto sono errati.
  • Re: Funzioni con strutture in c

    Ma in questa

    scanf("%s",);

    non manca qualcosa?

    E queste

    printf("lunedi'", dati->giornosettimana);

    che senso hanno? Dovrebbero essere

    printf("lunedi'");

    E soprattutto, che senso ha fare questo confronto

    if (strcmp(stringa1, "monday"))

    ??
Devi accedere o registrarti per scrivere nel forum
43 risposte