|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#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 |
|
|
|
|
|
#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 |
|
|
|
|
|
#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 |
|
|
|
|
|
#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 |
|
|
|
|
|
#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: 05:08.











a me funziona... sei sicuro che argv[1] esista? ( ovverosia che argc > 1 ovverosia che effettivamente gli passi l'argomento sulla linea di comando )








