Odio la struttura switch!!!
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Pag 1 di 2 12 UltimoUltimo
Visualizzazione risultati da 1 a 15 di 23

Discussione: Odio la struttura switch!!!

Cambio titolo
  1. #1
    Team JangeL L'avatar di Ph0en1X
    Registrato il
    10-03
    Messaggi
    11.075

    Arrabbiato Odio la struttura switch!!!

    Ciao, sn sempre io ke vi rompo le scatole con il C++ e questa volta lo faccio x kiedervi cosa c'è di male in questo esercizio. Praticamente devo calcolare il totale delle vendite di una azienda ke mi da i prezzi dei 5 prodotti ke vende, ecco il prog:

    #include <iostream>

    using namespace std;

    int main()
    {
    double prod1 = 2.98, prod2 = 4.50, prod3 = 9.98, prod4 = 4.49, prod5 = 6.87,
    totale = 0;
    int num;

    cout << "Inserisci il numero del prodotto compreso fra 1 e 5 "
    << "( -1 per terminare ): ";


    while ( ( num = cin.get() ) != -1 ) {
    switch ( num ) {

    case '1':
    totale += prod1;
    break;

    case '2':
    totale += prod2;
    break;

    case '3':
    totale += prod3;
    break;

    case '4':
    totale += prod4;
    break;

    case '5':
    totale += prod5;
    break;

    case '\n':
    case '\t':
    case ' ':
    break;

    default:
    cout << "Hai inserito un carattere non valido."
    << " Inserisci un nuovo valore." << endl;
    break;
    }
    }
    cout << "\n\nIl totale delle vendite è: " << totale << endl;

    return 0;
    }

    Potreste dirmi dove sta l'errore? Il problema è ke quando digito -1, ossia quello ke dovrebbe essere il valore sentinella, il prog nn termina. PLEASE HELP!!!

  2. #2
    Utente L'avatar di Spillo
    Registrato il
    11-03
    Messaggi
    528
    forse le virgolette dei numeri dei case
    prova
    Processore: Athlon 64 3200+ con Thermalright SLK948u
    Ram:
    2x512 Kingston HiperX PC3500 Scheda Video: POV 6800 Ultra
    Motherboard: Abit KV8-Max3 HD: Maxtor DiamondMax SATA 80gb

    Xbox LIVE Tag: Hiperblade
    Giochi Live: Halo 2, Full Spectrum Warrior, Rally Sport Challenge 2, Project Gotham Racing 2, Midtown Madness 3, Return To Castle Wolfenstein, MotoGP 2, Kingdom Under Fire, demo nel kit.

  3. #3
    Standing by L'avatar di TEC_MrHide
    Registrato il
    04-03
    Località
    Provincia di Milano
    Messaggi
    10.068
    Nel senso che rimane sempre nel while?
    "It is by will alone I set my mind in motion. It is by the juice of sapho that thoughts acquire speed, the lips acquire stains, the stains become a warning. It is by will alone I set my mind in motion." - mentat Piter De Vries.

  4. #4
    Utente L'avatar di Spillo
    Registrato il
    11-03
    Messaggi
    528
    si, perchè le virgolette si usano per tipi char (dovrebbe essere così, non mi ricordo molto bene)
    Processore: Athlon 64 3200+ con Thermalright SLK948u
    Ram:
    2x512 Kingston HiperX PC3500 Scheda Video: POV 6800 Ultra
    Motherboard: Abit KV8-Max3 HD: Maxtor DiamondMax SATA 80gb

    Xbox LIVE Tag: Hiperblade
    Giochi Live: Halo 2, Full Spectrum Warrior, Rally Sport Challenge 2, Project Gotham Racing 2, Midtown Madness 3, Return To Castle Wolfenstein, MotoGP 2, Kingdom Under Fire, demo nel kit.

  5. #5
    Standing by L'avatar di TEC_MrHide
    Registrato il
    04-03
    Località
    Provincia di Milano
    Messaggi
    10.068
    Citazione Spillo
    si, perchè le virgolette si usano per tipi char (dovrebbe essere così, non mi ricordo molto bene)
    Sì ma non credo serva nel suo caso, in quanto il suo problema è che anche se il valore letto è -1, la condizione del while è sempre true.
    Se ho capito bene...
    "It is by will alone I set my mind in motion. It is by the juice of sapho that thoughts acquire speed, the lips acquire stains, the stains become a warning. It is by will alone I set my mind in motion." - mentat Piter De Vries.

  6. #6
    Utente L'avatar di Spillo
    Registrato il
    11-03
    Messaggi
    528
    Citazione TEC_MrHide
    Sì ma non credo serva nel suo caso, in quanto il suo problema è che anche se il valore letto è -1, la condizione del while è sempre true.
    Se ho capito bene...
    è vero
    domani ci penso adesso ho sonno e non ho + voglia di scrivere
    Processore: Athlon 64 3200+ con Thermalright SLK948u
    Ram:
    2x512 Kingston HiperX PC3500 Scheda Video: POV 6800 Ultra
    Motherboard: Abit KV8-Max3 HD: Maxtor DiamondMax SATA 80gb

    Xbox LIVE Tag: Hiperblade
    Giochi Live: Halo 2, Full Spectrum Warrior, Rally Sport Challenge 2, Project Gotham Racing 2, Midtown Madness 3, Return To Castle Wolfenstein, MotoGP 2, Kingdom Under Fire, demo nel kit.

  7. #7
    Utente L'avatar di pentothal
    Registrato il
    10-02
    Località
    Firenze
    Messaggi
    4.692
    - togli le virgolette;
    - se non funzia sostituisci il while con uno squallidissimo while(true) e usa un case anche per -1;

    esempio:

    while(true){
    case 1:
    <istruzioni>
    break;
    case 2:
    <istruzioni>
    break;
    ...
    case -1:
    break;
    }

  8. #8
    Standing by L'avatar di TEC_MrHide
    Registrato il
    04-03
    Località
    Provincia di Milano
    Messaggi
    10.068
    Forse al posto di while(true) è meglio mettere un boolean dichiarato all'inizio true, poi dichiarato false nel case -1.
    while(vai){
    ...
    case -1:
    vai=false;
    break;
    }
    "It is by will alone I set my mind in motion. It is by the juice of sapho that thoughts acquire speed, the lips acquire stains, the stains become a warning. It is by will alone I set my mind in motion." - mentat Piter De Vries.

  9. #9
    Utente L'avatar di hottar17
    Registrato il
    10-03
    Località
    Trient
    Messaggi
    55
    a occhio basta mettere
    while ( ( num = atoi(cin.get() )) != -1 )

    dal momento che get lo tira dentro come char

    nei case ti va di culo perchè anche '1' '2' e '3' etc sono char e non int (1 2 3...)

    oppure il confronto del while lo fai con "-1", ma non è pulitissimo
    THAT GOD TAXI DRIVER
    (che Dio t'assista)

  10. #10
    Standing by L'avatar di TEC_MrHide
    Registrato il
    04-03
    Località
    Provincia di Milano
    Messaggi
    10.068
    Citazione hottar17
    ...
    oppure il confronto del while lo fai con "-1", ma non è pulitissimo
    Se usa i doppi apici viene interpretato come String.
    Deve usare i singoli ('-1') anche se non so se esiste il char -1.
    P.S.
    Io conosco solo Java, magari mi sono sbagliato, nè.
    "It is by will alone I set my mind in motion. It is by the juice of sapho that thoughts acquire speed, the lips acquire stains, the stains become a warning. It is by will alone I set my mind in motion." - mentat Piter De Vries.

  11. #11
    Utente
    Registrato il
    10-02
    Messaggi
    2.367
    Ragazzi un consiglio, anzi un obbligo quendo si parla di queste cose.

    Le sezioni di codice metteteli tra i tag (code) e (/code) , ovviamente usando le parentesi quadre al posto delle tonde.

  12. #12
    ISWT - Ad Vitam Aeternam L'avatar di red.devil
    Registrato il
    02-03
    Località
    London • UK
    Messaggi
    3.003
    Codice:
    //ma nn puoi fare così??
    
    int coso(){
    	int totale=0;//prod1=...;prod2=...;...;...
    	do{	
    		scanf("%i",&asd);
    		switch(asd){
    			case 1: totale+=prod1; break;
    			case 2: totale+=prod2; break;
    			case 3: totale+=prod3; break;
    			case 4: totale+=prod4; break;
    			case 5: totale+=prod5; break;
    			default:
    					return totale;
    		}
    	}while(asd!=-1); //condizione inutile, perchè se in numero è <1 || >5
     killa la funzione ritornando il valore.
    }
    
    void main(){
    	printf("totale: &i\n",coso());
    }

  13. #13
    Team JangeL L'avatar di Ph0en1X
    Registrato il
    10-03
    Messaggi
    11.075
    Grazie x l'aiuto ragazzi, anke se credo di non averci capito niente, dopotutto odio questa struttura switch del ca**o.

  14. #14
    ISWT - Ad Vitam Aeternam L'avatar di red.devil
    Registrato il
    02-03
    Località
    London • UK
    Messaggi
    3.003
    Codice:
    //così dovrebbe andare, ed è più pulito come codice ;)
    
    void main(){
            int totale=0;//prod1=...;prod2=...;...;...
            do{     
                    scanf("%i",&asd);
                    switch(asd){
                            case 1: totale+=prod1; break;
                            case 2: totale+=prod2; break;
                            case 3: totale+=prod3; break;
                            case 4: totale+=prod4; break;
                            case 5: totale+=prod5; break;
    			case -1:printf("totale: %i\n",totale);
                    }
            }while(asd!=-1);  
    }
    cmq guarda che l'istruzione switch è utile e soprattutto molto semplice, se ci spieghi dove hai problemi ti aiutiamo noi

  15. #15
    Team JangeL L'avatar di Ph0en1X
    Registrato il
    10-03
    Messaggi
    11.075
    Il mio problema è ke nn riesco a uscire dal costrutto nemmeno digitando quello ke "dovrebbe" essere il valore sentinella, ossia -1! E poi un domanda a te Red.Devil: ke differenza c'è fra il dikiarare la variabile "main" come int o void? TNX

Pag 1 di 2 12 UltimoUltimo

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •