Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C] esistono casi per cui la strcmp non funziona?

    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?
    Silvia C.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    A me non da' sempre 0 ... come la usi? Mostra il main e le chiamate che fai ...

  3. #3
    Troppo complicato riportare tutto il main, cmq ti riporto l'essenziale:

    codice:
    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...
    Silvia C.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Capirai da solo il perche' della modifica ...

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

  5. #5
    Nooooo.... 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..!!!
    Silvia C.

  6. #6
    Originariamente inviato da oregon
    Capirai da solo il perche' della modifica ...
    Ah, comunque semmai da sola...!!
    Silvia C.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da sparkling
    Ah, comunque semmai da sola...!!
    Non ho poteri divinatori ... almeno per ora ...

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

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

  8. #8
    Originariamente inviato da oregon
    Non ho poteri divinatori ... almeno per ora ...

    Finche' non mi riparano la sfera di cristallo ...
    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! Grazie ancora!
    Silvia C.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.