Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    13

    [C++] Problema con le enum

    Salve gente, ho scritto un programmino in c++ per capire l'uso delle enumerazioni; eccolo qui:

    codice:
    #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

    codice:
    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!
    Running over the same old ground, what have we found? The same old fears...

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    12
    a naso e in velocità: forse il valore di choose dovresti prenderlo all'interno del ciclo prima dello switch

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    12
    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

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    13
    niente... mi dà sempre lo stesso errore
    Running over the same old ground, what have we found? The same old fears...

  5. #5
    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:

    codice:
    #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;
    }
    Ci sono 10 tipi di persone al mondo, chi conosce il sistema binario e chi no.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    12
    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

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    13
    giusto! grazie assai!
    Running over the same old ground, what have we found? The same old fears...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.