Newsgroup: it.comp.lang.c++
Titolo: Controllo di flusso con switch/case

Salve,
mi sto "addentrando" nel impervio :) mondo del C ++..
sto "studiando" la fantastica guida di Marotta (ringrazio lui e chi me l'ha
consigliata...;) ...)
ho però una perplessità...
sto facendo un semplicissimo "parser" per i parametri da riga di comando
ecco il fantastico codice:
-------
#include < iostream >
  using namespace std;
  int main(int argc, char* argv[]) {
    cout << "Riga di comando: " << endl;
    cout << argv[0] << endl;
    for(int i=1; i < argc; ++i)
 {
      cout << "Parametro " << i << " = " << argv[i] << endl;
   //
   switch  (argv[i])
   {
   case 'aa':
   cout << "cippa lippa A" ;
   case 'ab':
   cout << "cippa lippa B";
   case 'ac':
   cout << "cippa lippa C";
   case 'ad':
   cout << "cippa lippa D";
   }
   //
 }
-------
ovviamente è sbagliato perchè switch accetta solo valori int...
ed ora la domanda.... per fare quello che in vb faccio con un banale
"select case VariabileStringa" non dovrò mica usare una marea di "if"?
grazie e abbiate pietà :)
--
Davide®

"select case VariabileStringa" non dovrò mica usare una marea di "if"?
Sei obbligato a procedere in questo modo.
L'istruzione select case del VB la puoi usare per fare qualunque cosa
-anche sostituire tutti gli if del programma - e molto spesso fa scrivere
codice sporco. Quindi credo che sia per questo che la soluzione del C++ ha
seguito tale linea.

"select case VariabileStringa" non dovrò mica usare una marea di "if"?
Certo che si'. Il C++ e' un linguaggio serio e coerente.
--
Andrea Laforgia (ICQ 87230455)
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

"select case VariabileStringa" non dovrò mica usare una marea di "if"?
Purtroppo si... lo switch-case del C/C++ non e` il massimo.
Paolo
p.s.
  ricorda che le stringhe C vanno racchiuse tra doppi apici.
  Se ti sei scaricato "Thinking in C++" (o hai un libro aggiornato),
  ti consiglio di studiare  la classe standard "string".
  Sul mio tutorial non e` trattata (per ora...), ma e` molto comoda.

 Certo che si'. Il C++ e' un linguaggio serio e coerente.
Sul serio sono d'accordo,ma la sua serieta e' data dalla sua
complessita,che in certi casi lo rende non molto coerente.
--
Ivan Molella
__LINUX__ the choice of the __GNU__ generation
icq# 97960484

"select case VariabileStringa" non dovrò mica usare una marea di "if"?
Si, ma con il sistema che ho illustrato poco fa, non con una marea di
if cosi' disposti:
if(argomento=="aa")blabla();
if(argomento=="bb")cacacww();
if(argomento=="cc")mowefmwe();
Altrimenti costringerai il compilatore a controllare il risultato di
tutti gli if, operazione che sarebbe meglio evitare per una pura
questione di eleganza ed anche per ottimizzare il codice.
Il Ghenio
-----
E'più oscuro del crepuscolo, é più rosso del sangue,
in nome della pace e della giustizia faccio appello a
tutti i poteri più remoti dell'oscurità, perché mi
aiutino a distruggere i miei nemici e tutti coloro
che saranno tanto sciocchi da ostacolarmi. FULMINE ROSSO!!
(Slayers)
-----

if(argomento=="cc")mowefmwe();
Questo codice e` comunque preferibile nel 99.9% dei casi perche`
decisamente piu` leggibile e chiaro. D'altronde il costo del confronto
di due stringhe e` tale (a meno di stringhe di 2 caratteri) da
predominare enormemente e poi dovresti avere la
fortuna (sfiga?) che il test che ha successo sia tra i primi. Al
limite poi e` sempre possibile
tirare fuori qualche giochetto poco pulito (e che non postero`
mai!!!!!).
Paolo

complessita,che in certi casi lo rende non molto coerente.
Un esempio ?


 Un esempio ?
dato:
int * ==  int  class A::*;
Sarei portato ad assumere che:
int (*)(int) ==  int (class A::*)(int);
ma invece:
int (*)(int) != int (class A::*)(int);
La direttiva export(non implementata credo da nessun compilatore) creata
appositamente per dare ai template collegamento esterno,
e altre cosette dettate da compromessi dovuti alla complessita'
dell'implementazione di un compilatore c++.


La direttiva export(non implementata credo da nessun compilatore) creata
<snip>
Quando parlo di coerenza mi riferisco alla mancanza di ambiguita' del
linguaggio. Il C++ e' un linguaggio che eredita la mancanza di
ambiguita' dal suo predecessore.


 ambiguita' dal suo predecessore.
Dal momento che e' stato redatto uno standard del linguaggio,vien da se la
mancanza di ambiguita'.
Io invece ,per mancanza di coerenza,mi riferisco alla logica di
differenziare la gestione di alcuni comportamenti  particolari, rispetto ad
una piu' generale gestione che si applica in casi omogenei,che in certi
casi non permette appunto assunzioni di un comportamento che ci si potrebbe
attendere,ma richiede una conoscenza a priori di come il linguaggio standard
implementa alcuni meccanismi.
Da qui' l'enorme complessita' del linguaggio: tener conto di molte cose
specifiche.


int * ==  int  class A::*;
Questi sono oggetti molto diversi, l'uguaglianza non solo non vale in
C++, ma sarebbe logicamente errata (il secondo puntatore ha un vincolo
in piu` da rispettare).
Paolo

 in piu` da rispettare).
Scusa forse ho fatto confusione sulla dichiarazione dei tipi, intendevo:
class elem {
public:
  int pt;
  elem(int pointer) : pt(pointer) { }
  void set_pt(int*) { }
};
void setta_pt(int *pt) { }
int main()
{
  elem obj(10);
  int *pt = &
obj.pt
;  // tutto liscio, stesso tipo
  void (*pt_membro)(int*) = &obj.set_pt; // warning: non sono dello
stesso tipo
  cout << "pt: " << *pt << endl;
  pt_membro(pt);  // disastro


pulito (e che non postero`mai!!!!!).
Se funzionano i giochetti sono sempre ben accetti, anche perché le
lunghe sequenze di if non sono tecniche molto professionali, meglio
evitarle quando possibile.


 evitarle quando possibile.
Se i giochetti sono troppo sporchi è bene evitarli, perché se qualcuno meno
competente andrà a manutenere il codice combinerà senz'altro dei guai. O
almeno, è opportuna una buona commentazione al trucchetto "sporco".
Domenico Barra

almeno, è opportuna una buona commentazione al trucchetto "sporco".
Da questo punto di vista non c'é alcun problema: io commento sempre in
abbondanza il software che produco, ed anzi mi incazzo quando vedo
gente che non lo fa.
