PDA

Visualizza la versione completa : [C] esistono casi per cui la strcmp non funziona?


sparkling
25-06-2007, 13:14
Perche' questo pezzo di codice non funziona??

char ** comandi = (char **)malloc(sizeof(char*)*MAXDIM);
int j = 0;

int valuta(char * msg)
{
int numPar = 0;
comandi[j] = (char*)malloc(sizeof(char)*MAXDIM);
comandi[j] = strtok(msg, " ");
while(comandi[j] != NULL)
comandi[++j] = strtok(NULL," ");
numPar = j;
if(!strcmp(comandi[0],"print")) return 2;
else if(!strcmp(comandi[0],"display")) return 3;
else if(!strcmp(comandi[0],"save")) return 4;
else if(!strcmp(comandi[0],"load")) return 5;
else if(!strcmp(comandi[0],"exit")) return 6;
else if(!strcmp(comandi[0],"help")) return 7;
else return 0;
}

e' una funzione che come potete vedere, a seconda del comando digitato ritorna un intero diverso.
Io praticamente quando digito da tastiera un comando, prendo la stringa e faccio switch(valuta(comando)) e a seconda di cosa ho digitato mi da una cosa diversa. Se ritorna 0, poiche' non corrisponde a nessuno dei comandi che valuto, mi stampa una frase di errore... Ecco..
Come mai mi stampa SEMPRE la frase di errore??
Cosa c'e' che no nva nella mia strcmp?? Cosa sbaglio? Quali potrebbero essere i casi per cui non funziona?

oregon
25-06-2007, 13:52
A me non da' sempre 0 ... come la usi? Mostra il main e le chiamate che fai ...

sparkling
25-06-2007, 15:54
Troppo complicato riportare tutto il main, cmq ti riporto l'essenziale:


while(TRUE)
{
printf("\n-? ");
if(feof(stdin)) rewind(stdin);
fgets(mess,MAXDIM,stdin);
switch(m = valuta(mess))
{
case 2:
{
print();
break;
}
case 3:
{
display();
break;
}
case 4:
{
save();
break;
}
case 5:
{
load();
break;
}
case 6:
{
exit();
break;
}
case 7:
{
help();
break;
}

default:
{
printf("Errore di comando\n");
break;
}
}
}

Ecco, a me stampa sempre e solo Errore di comando... :(

oregon
25-06-2007, 16:18
Capirai da solo il perche' della modifica ...



...
fgets(mess,MAXDIM,stdin);
mess[strlen(mess)-1]='\0';
switch(m = valuta(mess))

sparkling
25-06-2007, 16:36
Nooooo.... :incupito: non ci posso credere... non puo' essere per una cavolata del genere.... sono giorni che ci impazzisco!!! :berto:
grazie...
Comunque sto odiando il C...!! Mi da' un'angoscia! Ogni volta sbaglio queste cose... e perdo un sacco di tempo..!!! :jam:

sparkling
25-06-2007, 16:37
Originariamente inviato da oregon
Capirai da solo il perche' della modifica ...

Ah, comunque semmai da sola...!! :D :D :D

oregon
25-06-2007, 16:55
Originariamente inviato da sparkling
Ah, comunque semmai da sola...!! :D :D :D

Non ho poteri divinatori ... almeno per ora ... :zizi:

Finche' non mi riparano la sfera di cristallo ... :zizi:

P.S. Il C e' il linguaggio che, personalmente, mi piace di piu' ... punti di vista ...

sparkling
25-06-2007, 17:53
Originariamente inviato da oregon
Non ho poteri divinatori ... almeno per ora ... :zizi:

Finche' non mi riparano la sfera di cristallo ... :zizi:

Ti capisco... infatti era detto scherzosamente!!


P.S. Il C e' il linguaggio che, personalmente, mi piace di piu' ... punti di vista ...

Forse quando mi riuscira' potro' dire che e' il linguaggio che mi piace di piu'.. per il momento NO! :biifu: Grazie ancora!

Loading