PDA

View Full Version : C++ e istruzione switch


Metalmino
16-01-2012, 19:12
Raga una domanda veloce veloce :)

Come mai non posso creare un istruzione del tipo:
switch (numero)
{
case codice1:
somma += quantita;
break;

ecc....ecc...}



?

In pratica mi dice che la variabile intera codice1 (già dichiata prima con un valore intero appunto, e il compilatore me la legge appartente a quella istruzione ;) ) non può essere inserita. invece se metto un numero intero (tipo "case 1: ) mi compila il programma.

Come mai? Dove sbaglio?

Cait Sith
16-01-2012, 20:08
probabilmente case vuole una costante e non puoi specificare una variabile
onestamente non mi ero mai posto il problema perchè lo swicth non lo uso mai
in alternativa puoi usare il costrutto "else if"

if(numero==codice1){

}else if(numero==codice2){

}else{

}

mesonepigreco
16-01-2012, 20:52
Alcuni programmatori ritengono l'uso dello switch obsoleto, visto che lo stesso effetto può essere ottenuto con una serie di if - else if - else ti consiglio anche io di implementarli così.

british
16-01-2012, 21:56
Alcuni programmatori ritengono l'uso dello switch obsoleto, visto che lo stesso effetto può essere ottenuto con una serie di if - else if - else ti consiglio anche io di implementarli così.

perchè? l'uso dello switch-case è decisamente idiomatico in molti linguaggi C-like (per esempio per implementare le FSM), inoltre il compilatore lo può (spesso) efficientemente tradurre in una jump table.

ciao!

Metalmino
16-01-2012, 23:14
Sto studiando ingegneria informatica, quindi diciamo che quella dello "switch" è una prassi, anche se come è ovvio che sia è molto più spontaneo usare il costrutto if else :D

Comunque grazie per le risposte, ora so che con switch possono essere usati solo costanti :D (anche valori char per la cronaca, i quali possono essere letti direttamente anche in ascii :D)

marco.r
17-01-2012, 00:46
perchè? l'uso dello switch-case è decisamente idiomatico in molti linguaggi C-like (per esempio per implementare le FSM), inoltre il compilatore lo può (spesso) efficientemente tradurre in una jump table.

ciao!
Lo switch e' veramente poco piu' di una jump table in C e C++, e i case non molto differenti da label, tanto che si riescono a scrivere porcherie tipo la seguente

void foo(int i)
{
switch(i)
{
case 10:
i+=1;
while( i > 0 )
{
case 9:
std::cout << i << std::endl;
i--;
}
break;
case 8:
default:
break;
}
std::cout << "i=" << i << std::endl;
}

:asd:
(ci sono comunque degli usi intelligenti e sensati di questo meccanismo...)