PDA

Visualizza la versione completa : [C++] Uso corretto dei tipi enum


metallus
13-06-2007, 19:14
Salve gente, ho scritto un programmino in c++ per capire l'uso delle enumerazioni; eccolo qui:



#include <iostream>

using namespace std;

int main()
{
typedef enum colore{giallo, rosso, blu};
colore c1, c2;
int choose;
cout << "Inserisci il colore:\n" << endl;
cout << "1 - giallo\n2 - rosso\n3 - blu\n";
cin >> choose;
do {
switch(choose){
case 1:
c1 = giallo;
cout << c1 << endl;
break;
case 2:
c1 = rosso;
cout << c1 << endl;
break;
case 3:
c1 = blu;
cout << c1 << endl;
break;
default: cout << "Selezione errata; riprova\n";
cin >> choose;
}
}while(choose != 1 && choose != 2 && choose != 3);

cout << c1 << endl;
c2 = c1;
cout << c2 << endl;
return 0;
}



Non presenta errori durante la compilazione(0 errori e 0 warning), tuttavia mentre lo eseguo accadono cose strane:

se provo a inserire un valore di choose compreso fra quelli che mando a schermo(1, 2, o 3), il programma mi stampa senza alcun problema i valori di c1 e c2 corrispondenti. Se invece provo a inserire volutamente un dato sbagliato(per esempio 5), il progamma mi invita a ripetere l'operazione, ma al momento dell'inserimento del dato esatto, il debug mi dice che alla riga



cout << c1 << endl;

sto usando la variabile c1 senza averla definita. Nella fattispecie assegna a c1 l'anormale valore di -85899346. Come posso risolvere questo problema?
La cosa strana è che se inserisco il valore choose esatto al primo tentativo il programma si chiude correttamente, mentre se sbaglio al primo tentativo e azzecco al secondo mi dà errore!

lukas73
13-06-2007, 20:49
a naso e in velocità: forse il valore di choose dovresti prenderlo all'interno del ciclo prima dello switch

lukas73
13-06-2007, 20:53
anche perchè così inserendo un valore sbagliato la prima volta va nell'opzione di default della switch, li chiede di inserire un altro valore, gliene dai uno corretto (1,2 o 3) e esce dal ciclo (la condizione del while diventa falsa) senza fare nulla col nuovo valore acquisito

metallus
14-06-2007, 11:49
niente... mi dà sempre lo stesso errore :confused:

bigmickey
14-06-2007, 12:10
Scusa ma quando metti un valore diverso da 1,2,3 il programma esce dal ciclo
senza aver assegnato valori a c1. Per defaul assegna che so.. nessun colore.

Forse ho capito quello che vuoi fare:



#include <iostream>

using namespace std;

int main()
{
typedef enum colore{giallo=1, rosso, blu};
colore c1, c2;
int choose;

cout << "Inserisci il colore:\n" << endl;
cout << "1 - giallo\n2 - rosso\n3 - blu\n";


do {
cin >> choose;
switch(choose){
case 1:
c1 = giallo;
cout << c1 << endl;
break;
case 2:
c1 = rosso;
cout << c1 << endl;
break;
case 3:
c1 = blu;
cout << c1 << endl;
break;
default: cout << "Selezione errata; riprova\n";

}
}while(choose != 1 && choose != 2 && choose != 3);

cout << c1 << endl;
c2 = c1;
cout << c2 << endl;

system("pause");
return 0;
}

lukas73
14-06-2007, 12:17
la soluzione di bigmickey era esattamente quello che dicevo
il primo listato funziona solo se inserisci dal principio un valore corretto
altrimenti non fa nulla sulla variabile c1 (che non viene inizializzata perciò ha quel valore strano) e se inserisci un valore corretto di choose dal blocco di default esce subito dal ciclo senza modificare i valori di c1 che rimane non inizializzata

metallus
14-06-2007, 13:52
giusto! :) grazie assai! :zizi:

Loading