PDA

Visualizza la versione completa : [c++] Uso Enum con il ciclo switch


killer922009
24-04-2012, 15:40
Ciao ragazzi potete aiutarmi a capire come funziona l'enum nel ciclo switch??
Con l'enum io diciamo creo una nuova variabile che può assumere soltanto i valori che decido io ma poi come faccio ad usarla nei case dello switch? Prendendo un esempio del semaforo io scrivo:



#include <iostream>
using namespace std;


int main()
{
int luce;
enum luce {
Rosso=0,
Verde=1,
Giallo=2
};



cout<<"Inserisci colori: \n";
cin>>luce;

switch(luce) {
case Rosso:
cout<<"STOP. \n";
break;
case Verde:
cout<<"continua. \n";
break;
case Giallo:
cout<<"preparati allo stop. \n";
break;
}




system ("PAUSE");
return 0;
}



quando nel comando di cin inserisco i vari colori il programma non va, cosa sbaglio? Grazie.

celtico94
24-04-2012, 16:12
Devi inserire i numeri per come hai scritto tu l'enum, essendo esso un intero! se scrivi 0 ti riferisci a rosso, ecc...
capito? per come vuoi far tu, cambia il tipo in string, inverti i numeri con le parole e andrà :)

killer922009
24-04-2012, 21:19
Originariamente inviato da celtico94
Devi inserire i numeri per come hai scritto tu l'enum, essendo esso un intero! se scrivi 0 ti riferisci a rosso, ecc...
capito? per come vuoi far tu, cambia il tipo in string, inverti i numeri con le parole e andrà :)

e come si invertono i numeri in stringa?

Who am I
24-04-2012, 23:34
Per il compilatore il tipo enum luce è una variabile che può assumere i valori 0,1 o 2.
Rispettivamente intercambiabili con Rosso,Verde e Giallo.
Questo è ciò che è valido per il compilatore, trattala come se fosse una variabile qualsiasi, con la differenza che ha come dominio {0,1,2}.
Non esiste che il programma capisce in maniera automatica come stampare una variabile di tipo luce.Non sa come stamparla, non è un umano e non sa che se ha valore 0 (oppure valore Rosso), deve stampare la stringa "Rosso", Rosso a compile-time è soltanto un' etichetta che identifica il valore zero per enum luce.
Quindi puoi definire tu un operatore:



ostream& operator<< (ostream& os, const luce& l)
{
switch(l)
{
case Rosso:
os << "Rosso";
break;
case Verde:
os << "Verde";
break;
case Giallo:
os << "Giallo";
}
return os;
}

Loading