Newsgroup: it.comp.lang.c
Titolo: problemi con il confronto delle stringhe tramite switch

Problemino con le stringhe...ho usato uno switch per confrontare una 
stringa immessa dall'utente da riga di comando con una serie di casi; a 
quanto pare lo switch finisce sempre nel default! :-/
Ecco il codice:
------------------------------------------------------------
#include <stdio.h>
int main(int argc, int *argv[]){
    printf("Il numero di argomenti passati dalla linea di comando Š: 
%d\n", argc);
    printf("Il terzo parametro Š: %c\n", *argv[3]);
    /* Controlla se sono stati inseriti 3 parametri */
    if(argc == 4){
       switch (*argv[3]){
          case 'm': if(*argv[1] < *argv[2]) printf("1");
                    else printf("0");
                    break;
          case 'M': if(*argv[1] > *argv[2]) printf("1");
                    else printf("0");
                    break;
          case '=': if(*argv[1] == *argv[2]) printf("1");
                    else printf("0");
                    break;
          default: printf("Inserire un simbolo corretto come terzo 
parametro");
                   break;
       }
       /* Controllo riconoscimento carattere inserito dalla tastiera
       if(*argv[3] == 'm') printf("\ncarattere riconosciuto\n");
       */
    }else{
	   printf("Il numero di parametri inseriti non Š corretto");
    }
    return 0;
}
------------------------------------------------------------
Non riesco a trovare una soluzione per il problema... Grazie per l'aiuto.
Luca

 quanto pare lo switch finisce sempre nel default! :-/
non puoi usare uno switch per confrontare le stringhe. al 
massimo singoli caratteri (visto che il valore 
dell'espressione dev'essere intero).
poi:
1. il prototipo corretto di main se vuoi passare argomenti 
da riga di comando è:
int main(int argc, char *argv[]);
non
int main(int argc, int *argv[]);
2. non puoi usare gli operatori == < > per confrontare le 
stringhe nel modo in cui hai fatto; devi usare una funzione 
tipo strcmp();
3. se invece gli argomenti che passi sono costituiti da 
singoli caratteri (in realtà saranno stringhe contenenti il 
carattere + il terminatore \0), allora quel codice può andar 
bene con le opportune correzioni, ovvero sostituisci il 
prototipo di main con quello corretto e sposta
printf("Il terzo parametro Š: %c\n", *argv[3]);
dentro il corpo dell'if(argc == 4).
ciao.

cane ha scritto:

Ho risolto in questo modo:
------------------------------------------------------------------
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]){
    char *m = "m";
    char *M = "M";
    char *u = "=";
    printf("Il numero di argomenti passati dalla linea di comando Š: 
%d\n", argc);
    printf("Il terzo parametro Š: %c\n", *argv[3]);
    /* Controlla se sono stati inseriti 3 parametri */
    if(argc == 4){
       /* Controlla che il parametro immesso si consentito altrimenti 
stampa il messaggio di errore */
       if((strcmp(m, argv[3]) == 0) || (strcmp(M, argv[3]) == 0) || 
(strcmp(u, argv[3]) == 0)){
          if(atoi(argv[1]) < atoi(argv[2])) printf("1");
          if(atoi(argv[1]) > atoi(argv[2])) printf("1");
          if(atoi(argv[1]) == atoi(argv[2])) printf("1");
       }else{
          /* Stampa il messaggio di errore */
          printf("Inserire un carattare valido come terzo argomento");
	  }
    }else{
        /* Se non sono stati inseriti 3 parametri stampa questo 
messaggio di errore */
	   printf("Il numero di parametri inseriti non Š corretto");
    }
    /* Indica che il programma è terminato con successo */
    return 0;
}
------------------------------------------------------------------
Effettivamente le stringhe non possono essere confrontate usando un 
semplice switch :-)
Altrimenti... che senso avrebbe la funzione strcmp!?
Grazie, Luca

 tipo strcmp();
L'errore era nel prototipo di main, poi i confronti li effettua su char
non su stringhe, quindi quello switch e` corretto.
Luca
-- 
Home: 
http://kronoz.cjb.net
Il tempo speso
a coltivare sogni
non è sprecato.

 Luca
E' vero! Il problema principale era proprio nel main. Quindi con lo 
switch è possibile confrontare delle stringhe come strcmp.
Luca

 switch è possibile confrontare delle stringhe come strcmp.
no, leggi il punto 3. della mia risposta. sei in un caso 
"particolare".
ciao.

 Giovanni
si si ... nel mio caso va benissimo dato che il confonto è fatto su un 
carattere. Nel caso fosse una stringa andrebbe bene l'uso di strcmp.
Luca

cane ha scritto:

Ok! :-)