Newsgroup: it.comp.lang.c
Titolo: Enumerazioni e Interi

Salve a tutti,
vorrei chiedere ( disperatamente ) aiuto riguardo un problema con le
enumerazioni. Cominciamo da capo. Prima di tutto definisco
typedef enum { FIORI, QUADRI, CUORI, PICCHE } SEME;
quindi creando una variabile varSeme di tipo SEME ho che la varSeme
può contenere uno dei quattro semi delle carte, giusto? E fin qui
tutto bene. La seconda caratteristia dell'enumerazione SEME è che da
enumerazione quale è assegna di default degli interi tipo FIORI = 0,
QUADRI = 1, CUORI = 2, PICCHE = 3. Così ho pensato bene, volendo far
arrivare un seme a caso di usare l'istruzione
varSeme = rand() % 4;
ma durante la compilazione sono sorte delle complicazioni. Anzi tutto
io non posso assegnare un intero a un'enumerazione, anche se non
capisco come mai. Se faccio un cast mi arriva una legnata di errore e
quindi ho subito lasciato stare. Il punto è che senza l'utilizzo di
interi non so come cavolo usare veramente le enumerazioni. Qualcuno mi
sa spiegare bene che razza di problema è per favore e ovviamente in
cosa sbaglio da inesperto?

 io non posso assegnare un intero a un'enumerazione,
Mah vah... Essendo le enumerazioni insieme di costanti e come se tu
avessi fatto qualcosa del tipo
#define PIPPO 0
PIPPO = 3;
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Giusto! Il fatto è che nn volevo fare un'assegnazione ma voglio poter
dare un valore a seme. Come faccio a impostare con rand() % 4 o in
qualsiasi altro modo un seme casuale?

 qualsiasi altro modo un seme casuale?
I valori all'enumerazione sono codificati al momento della compilazione,
secondo le regole che dovresti conoscere.
Al momento dell'istanziazione non puoi fare niente se non usare i valori
che sono gia' stati stabiliti. Non mi risulta che per le enumerazioni
esista il concetto di "inizializzazione" come per le costanti...
HTH


 capisco come mai. 
Nel linguaggio C è possibile usare le enumerazioni e gli interi nello 
stesso modo; in C++ (e sicuramente stai usando un compilatore C++), le
enumerazioni sono BEN DISTINTE dai valori enumerativi.
Basta che vai nelle opzioni di compilazione e troverai una voce 
(simile): "tratta gli enum come diversi dagli interi"

Ho studiato, lo giuro, ma dopo aver visto il codice di un mio amico che
funzionava mi è preso un colpo! Lui assegna dei numeri alle
enumerazioni trattandole come variabili in modo da cambiare seme.
Inoltre l'esercizio chiede esplicitamente di andare a random sul seme e
ovviamente la via piu semplice per il random è tramite intero. Mi
scuso per il disturbo, a volte i chiarimenti sono d'obbligo.

 scuso per il disturbo, a volte i chiarimenti sono d'obbligo.
Come ha fatto notare AlterX, le enumerazioni possono essere usate
come interi in C. Probabilmente stai usando un compilatore C++ 
(come il sottoscritto).
Se usi VC++, rinomina il file .c e riprova a compilare: i compilatori
C++, sono molto piu' rigorosi (e fanno fare meno porcherie, come quella
di considerare interi le enumerazioni). :-)


Si effettivamente adesso compila, eccome se compila. Uso Devc++ e
salvando il file come sorgente c compila. Mai piu pensavo una cosa del
genere, adesso mi viene il dubbio che gli altri esercizi possano essere
errati dato che ho scritto tutto in c++ e invece dovrei scriverli in c.
Ringrazio tutti, grazie mille, mi avete proprio aiutato.