Problemi con struct e enum in C

Pubblicità

miky7

Utente Attivo
Messaggi
4
Reazioni
0
Punteggio
24
Ciao a tutti purtroppo ho un paio di problemi con le struc e le enum...ovvero mi spiego meglio:
vorrei creare una struct data e in questa inserire dei valori presi da un enum in cui inserisco sia i giorni che i mesi..posto il codice che però non funziona ma amgari si capisce meglio:

#include <stdio.h>
#include <stdlib.h>


typedef struct data
{
int mese;
int giorno;
};

int main()
{

typedef enum {Gennaio, Febbraio, Marzo, Aprile, Maggio, Giugno, Luglio, Agosto, Settembre, Ottobre, Novembre, Dicembre} mese;
typedef enum {Lunedi, Martedi, Mercoledi, Giovedi, Venerdi, Sabato, Domenica} giorno;

struct data *oggi;
oggi=(struct data *) malloc (sizeof(struct data));
mese prova=1;
giorno prov=1;
oggi->mese=prova;
oggi->giorno=prov;
printf("%s %s\n",oggi->giorno, oggi->mese);
free(oggi);
return 0;
}

In realtà poi il mio scopo sarebbe quello di chiedere all'utente di inserire una data tramite printf("Inserisci una data") ecc e scanf("", )nella scanf gli verrebbero passati poi valori numerici..
qualche consiglio??
Grazie mille a tutti in anticipo
smile.gif
 
Attenzione, dal codice che hai postato sembra che tu non abbia capito l'uso dei tipi enumerativi; essi, infatti, permettono di associare, nel sorgente del programma, un identificatore ad un valore intero, solo per migliorare la leggibilità del codice.

Con questa istruzione:
Codice:
typedef enum {Gennaio, Febbraio, Marzo, Aprile, Maggio, Giugno, Luglio, Agosto, Settembre, Ottobre, Novembre, Dicembre} mese;
associ all'identificatore Gennaio il valore numerico 0, a Febbraio 1, ..., a Dicembre 11, per poter scrivere istruzioni del tipo:
Codice:
oggi->mese = Gennaio;
invece di:
Codice:
oggi->mese = 0;

L'istruzione:
Codice:
printf("%s %s\n",oggi->giorno, oggi->mese);
è errata: infatti oggi->giorno e oggi->mese sono interi e non verrà stampato, al contrario di quello che suppongo tu volessi, gli identificatori associati al valore del giorno e del mese definiti nel tipo enumerativo; per ottenere tale risultato, puoi utilizzare dei vettori di stringhe d'appoggio:

Codice:
#include <stdio.h>
#include <stdlib.h>


struct data {
	int mese;
	int giorno;
};

int main() {
	
	typedef enum {Gennaio, Febbraio, Marzo, Aprile, Maggio, Giugno, Luglio, Agosto, Settembre, Ottobre, Novembre, Dicembre} mese;
	typedef enum {Lunedi, Martedi, Mercoledi, Giovedi, Venerdi, Sabato, Domenica} giorno;

	char* mesi[] = {"Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"};
	char* giorni[] = {"Lunedi", "Martedi", "Mercoledi", "Giovedi", "Venerdi", "Sabato", "Domenica"};

	struct data oggi;
	oggi.mese=Marzo;
	oggi.giorno=Martedi;
	printf("%s %s\n",mesi[oggi.mese], giorni[oggi.giorno]); // stampa Marzo Martedi

	return 0;
}

L'uso dei tipi enumerativi non è indispensabile per ottenere tale risultato; anche il seguente codice funziona senza problemi:

Codice:
#include <stdio.h>
#include <stdlib.h>


struct data {
	int mese;
	int giorno;
};

int main() {

	char* mesi[] = {"Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"};
	char* giorni[] = {"Lunedi", "Martedi", "Mercoledi", "Giovedi", "Venerdi", "Sabato", "Domenica"};

	struct data oggi;
	oggi.mese=2;
	oggi.giorno=1;
	printf("%s %s\n",mesi[oggi.mese], giorni[oggi.giorno]); // stampa Marzo Martedi

	return 0;
}
 
Pubblicità
Pubblicità
Indietro
Top