enum e struct in C

Pubblicità

toni1705

Nuovo Utente
Messaggi
98
Reazioni
9
Punteggio
28
ho un piccolo esercizio da svolegere
esso richiede di creare un'appuntamento avendo nome cognome e giorno dell'appuntamento
ho creato una function per inserire un'appuntamento, una per eliminarlo.
ora dovrei crearne una per poter visualizzare ,dato il giorno, le persone da incontrare
il problema è che non saprei come accedere a quel dato.
visto che enum è una categoria e non posso accedervi dalla struct;
C:
enum Generi {
    lunedi,
    martedi,
    mercoledi,
    giovedi,
    venerdi
    };

typedef struct
{
    char nome[MAX];
    char cognome[MAX];
    enum Generi genere;
    float prezzo;
    int cancellato;

}appuntamento;
appuntamento app[MAX]={
    {"claudio","lollino",lunedi,7.5,0},
    {"adelaide","pecora",lunedi,9.5,0},
    {"tony","tammaro",martedi,9.5,0},
    {"augusto","caro",mercoledi,10.5,0},
    {"gianna"," nannini",giovedi,8.5,0},
    {"MARIA","NAZIONALE",venerdi,9.5,0},
    };

main()
{
    // al
}[

  int i;
    char GIORNI[10];
     for(i=0;i<MAXSTR;i++)
    {
        if(strcmp(GIORNI,LUNEDI)==0 )
        {
        //come faccio a stampare ? potrebbero esserci altre persone   ad essere state aggiunte  tramite function
        }
       else break;
    }
}
 
Ultima modifica:
Scusa ma non ho capito bene quello che vuoi fare...
Devi stampare tutte le persone che hanno un appuntamento il tal giorno, o non sai come stamparle mostrandole tipo "calendario" (prima lunedì, poi martedì etc)?

Innanzitutto non puoi fare una strcmp su una enum in quel modo. Oltretutto la strcmp non è sicura e dovresti usare strncmp.
A parte ciò, quello che devi fare è dare un valore ai membri della tua ENUM (numerandoli da 0 a 4) e creare un array con i giorni della settimana.
Per essere chiaro:

C:
enum Generi {
    lunedi=0,
    martedi=1,
    mercoledi=2,
    giovedi=3,
    venerdi=4
};

const char *days[5] = {"Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì"};

Poi accederai in questo modo: days[app[i].genere] per ottenere la stringa che rappresenta il nome del giorno della settimana.
La i in questo caso è l'indice del for che andrà da 0 al numero di appuntamenti (che a quanto pare nel tuo caso non è dinamico, quindi non ho capito come fai a dire che possono venire aggiunti più appuntamenti, visto che nel codice che mostri, non si vede).

Prima di darti altri hint attendo maggiori info (anche tutte le "define" che usi non hanno molto senso viste così)...
 
Con quei dati definisci solo un giorno, quindi il calendario vale solo per una settimana. Che magari è anche giusto, dipende da cosa vuoi fare.
È un compito scolastico? Quello che hai pubblicato è parte di un codice (immagino sia una parte perché manca la definizione di MAX) che fa parte dell’esercizio, a cui deve aggiungere altro codice?
Un’altra nota, perché mai chiamare Generi l’enumerazione dei giorni della settimana?
Ad ogni modo il tuo codice è sbagliato.
Prima di tutto usi MAX sia per definire la lunghezza delle stringhe che la dimensione di un vettore, devono essere due definizioni diverse, sono due cose diverse.
Devi prima chiedere da terminale che giorno della settimana cercare, dopodiché eseguire un ciclo sugli elementi del vettore app[], e stampare tutti i nomi delle persone il cui appuntamento cade in quel giorno.
 
Scusa ma non ho capito bene quello che vuoi fare...
Devi stampare tutte le persone che hanno un appuntamento il tal giorno, o non sai come stamparle mostrandole tipo "calendario" (prima lunedì, poi martedì etc)?

Innanzitutto non puoi fare una strcmp su una enum in quel modo. Oltretutto la strcmp non è sicura e dovresti usare strncmp.
A parte ciò, quello che devi fare è dare un valore ai membri della tua ENUM (numerandoli da 0 a 4) e creare un array con i giorni della settimana.
Per essere chiaro:

C:
enum Generi {
    lunedi=0,
    martedi=1,
    mercoledi=2,
    giovedi=3,
    venerdi=4
};

const char *days[5] = {"Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì"};

Poi accederai in questo modo: days[app[i].genere] per ottenere la stringa che rappresenta il nome del giorno della settimana.
La i in questo caso è l'indice del for che andrà da 0 al numero di appuntamenti (che a quanto pare nel tuo caso non è dinamico, quindi non ho capito come fai a dire che possono venire aggiunti più appuntamenti, visto che nel codice che mostri, non si vede).

Prima di darti altri hint attendo maggiori info (anche tutte le "define" che usi non hanno molto senso viste così)...

Con quei dati definisci solo un giorno, quindi il calendario vale solo per una settimana. Che magari è anche giusto, dipende da cosa vuoi fare.
È un compito scolastico? Quello che hai pubblicato è parte di un codice (immagino sia una parte perché manca la definizione di MAX) che fa parte dell’esercizio, a cui deve aggiungere altro codice?
Un’altra nota, perché mai chiamare Generi l’enumerazione dei giorni della settimana?
Ad ogni modo il tuo codice è sbagliato.
Prima di tutto usi MAX sia per definire la lunghezza delle stringhe che la dimensione di un vettore, devono essere due definizioni diverse, sono due cose diverse.
Devi prima chiedere da terminale che giorno della settimana cercare, dopodiché eseguire un ciclo sugli elementi del vettore app[], e stampare tutti i nomi delle persone il cui appuntamento cade in quel giorno.
allora esatto manca tutto una serie di codice.
essendo un 'esercizio preso online.
ho cercato di eludere la parte del codice già svolto modificandolo per far capire + o - il senso,
ovviamente come dite ci sono degli elementi che non vanno bene perchè ho cercato di generalizzare.
non mi andava di lasciare un codice di 40 righe XD.per questo ho definito solo 1 variabile generale chiamate MAX. Dispatch ha capito il problema. avevo bisogno di stampare tutte le persone che hanno un appuntamento il tal giorno.
grazie per l'aiuto riesco effettivamente a stampare correttamente tutte le info necessarie ora.
grazie :)
 
@DispatchCode in realtà non è necessario assegnare i valori di una enumerazione, il compilatore lo fa automaticamente assegnando il valore zero al primo elemento, aumentando poi di uno per ogni valore successivo. Li si assegnano quando si vuole “forzare” valori ben precisi, ma in quel caso perde un po’ il suo scopo. Vedi Qui il manuale.

Un comune errore è di salvare il valore di una enumeratore (su file o database), poi cambiare i valori del enumeratore (per esempio aggiungendo un valore nel mezzo) e ricompilare il programma, a quel punto i valori salvati non sono più compatibili. Il enumeratore è conveniente, ma occorre saperlo usare.
 
@DispatchCode in realtà non è necessario assegnare i valori di una enumerazione, il compilatore lo fa automaticamente assegnando il valore zero al primo elemento, aumentando poi di uno per ogni valore successivo. Li si assegnano quando si vuole “forzare” valori ben precisi, ma in quel caso perde un po’ il suo scopo. Vedi Qui il manuale.

Un comune errore è di salvare il valore di una enumeratore (su file o database), poi cambiare i valori del enumeratore (per esempio aggiungendo un valore nel mezzo) e ricompilare il programma, a quel punto i valori salvati non sono più compatibili. Il enumeratore è conveniente, ma occorre saperlo usare.

Ah va bene, grazie per avermelo fatto notare. Temevo che potessero esserci problemi con compilatori differenti, non ricordavo se fosse uno standard.
 
Pubblicità
Pubblicità
Indietro
Top