• 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.076

    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.076
    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.076
    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
  •