| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  08-05-2009, 16:04 | #1 | 
| Member Iscritto dal: Apr 2009 
					Messaggi: 50
				 | 
				
				[C]chiarimenti su costrutto switch
			 
		ciao a tutti, volevo sapere se qualcuno può indicarmi un modo per usare il costrutto switch-case, con stringhe o char Codice: #include <stdio.h>
int main(int argc,char** argv[]){
switch ( argv[1]) {
case 'r':
    printf("reverse!\n");
   break;
case 'l':
    printf("limited!\n");
   break;
default:
    printf("normal!\n");
   break;
} 
}Codice HTML: prgramma_semplice.c:5: error: switch quantity not an integer | 
|   |   | 
|  08-05-2009, 16:53 | #2 | 
| Member Iscritto dal: Sep 2008 Città: Milano 
					Messaggi: 126
				 | 
		intanto i parametri del main che hai postato sono scorretti: argc va bene di tipo intpremesso ciò, argv[1] non è un char, bensì è il secondo elemento di argv e per quanto detto sopra è un array di caratteri. tornando a bomba: se vuoi effettuare lo switch su argv[1] e ( argv[1] è lungo un solo carattere oppure vuoi prenderne solo il primo carattere ) allora puoi fare: switch ( argv[1][0] ) ( prendendo esplicitamente il primo elemento di argv[1] ) oppure switch ( *argv[1] ) ( dereferenziando il puntatore ) così accedi al primo carattere della seconda stringa contenuta in argv. se invece vuoi switchare su delle stringhe di lunghezza arbitraria... beh non puoi, in quanto lo puoi fare solo su valori interi ( o promuovibili a intero, come un char ) l'alternativa è andare di if - strcmp - else, oppure usare qualche tipo di hash spero di non essere stato troppo incomprensibile ciao! british P.S. prima di accedere a qualsiasi titolo a elementi di argv ricordati di controllare che esistano attraverso argc, altrimenti il crash del programma è garantito | 
|   |   | 
|  08-05-2009, 17:32 | #3 | 
| Member Iscritto dal: Apr 2009 
					Messaggi: 50
				 | 
		grazie ma questa era una soluzione che mi aveva generato un ulteriore problema, infatti adesso con questa sintassi Codice: .....
int main(int argc,char *argv[]){
switch (*argv[1]) {
case 'r':
    printf("reverse!\n");
   break;
.....mi genera un segmentation fault, che dovrei riuscire a risolvere utilizzando il comando malloc, ma questo è utilizzabile su argv? o è meglio che crei un altro array su cui salvo tutti gli argomenti passati sulla riga di comando e applico malloc e switch sull'array appena creato? oppure se hai qualche altra soluzione migliore son tutto orecchie   | 
|   |   | 
|  08-05-2009, 17:59 | #4 | 
| Member Iscritto dal: Sep 2008 Città: Milano 
					Messaggi: 126
				 |  a me funziona... sei sicuro che argv[1] esista? ( ovverosia che argc > 1 ovverosia che effettivamente gli passi l'argomento sulla linea di comando ) ciao! british | 
|   |   | 
|  08-05-2009, 18:17 | #5 | 
| Member Iscritto dal: Apr 2009 
					Messaggi: 50
				 | 
		ah si scusa son proprio fuso oggi, mi ero dimenticato di passargli l'argomento   Grazie mille per avermi aiutato   | 
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 16:12.









 
		 
		 
		 
		







 
  
 



 
                        
                        










