Funzioni cambio tipo

di il
10 risposte

Funzioni cambio tipo

Buonasera, avrei dei dubbi sulla correttezza di due funzioni

Il programma è così composto:

il file head.h contiene:

typedef enum color { NERO, ROSSO, BIANCO } color_t;
più l'elenco delle seguenti funzioni:

- char color_to_char (color_t a);
trasforma a in un carattere
Es:
'N' se a contiene NERO
'R' se a contiene ROSSO
'B' se a contiene BIANCO
'?' altrimenti

- int char_to_color (char b);
trasforma un carattere in color_t
Es:
NERO se b=='N'
ROSSO se b=='R'
BIANCO se b=='B'
0 altrimenti


il file colore.c contiene l'implementazione delle funzioni color_to_char e char_to_color

char color_to_char (color_t a) {    
    char b;
    if (a==NERO)
        b='N';
    else if (a==ROSSO)
        b='R';
    else if (a==BIANCO)
        b='B';
    else b= '?';
    a=b;
    return(a);
}    
    

int char_to_color (char b) {
    
    if(b=='N')
        b = NERO;
    else if(b=='R')
        b = ROSSO;
    else if(b=='B')
        b = ROSSO;
    else b = 0;
    
    return 1;
}
Vorrei sapere se mi potete dare una dritta sugli errori. Dovrei fare il cast per passare da un tipo ad un altro? Per quanto riguarda il confronto stringhe della prima funzione all'inizio avevo pensato alla funzione strcmp()
Es:

if(strcmp(a,"NERO")==0)
a='N';

10 Risposte

  • Re: Funzioni cambio tipo

    Che c'entrano le stringhe e la strcmp?

    Nella prima funzione devi restituire b nel return non a.
    Nella seconda funzione perché restituisci 1?
  • Re: Funzioni cambio tipo

    Così vanno bene? Grazie
    
    char color_to_char (color_t a) {
        switch(a) {
        case NERO: {
            a='N';
        } break;
        case ROSSO: {
            a='R';
        } break;
        case BIANCO: {
            a='B';
        } break;
        default: {
            a='?';
        }
        }
        return(a);
    }
    
    int char_to_color (char b) {
        cell_t a;
        if(b=='N')
            a = NERO;
        else if(b=='R')
            a = ROSSO;
        else if(b=='B')
            a = BIANCO;
        else a = -1;
        return a;
    }
    
  • Re: Funzioni cambio tipo

    La prima no, ti avevo detto che deve restituire b e che b deve essere un char.

    Nella seconda cosa è cell_t ? Invece del tipo int deve essere color_t
  • Re: Funzioni cambio tipo

    Ho sbagliato a scrivere, nella seconda funzione intendevo color_t a;
    quindi la prima va bene
    
    char color_to_char (color_t a) {    
        char b;
        if (a==NERO)
            b='N';
        else if (a==ROSSO)
            b='R';
        else if (a==BIANCO)
            b='B';
        else b= '?';
        a=b;
        return(b);
    }   
    
    nella seconda non capisco qual è l'errore:
    
    int char_to_color (char b) {
        color_t a;
        if(b=='N')
            a = NERO;
        else if(b=='R')
            a = ROSSO;
        else if(b=='B')
            a = BIANCO;
        else a = -1;
        return a;
    }
    
    Nella definizione del tipo:
    typedef enum color { NERO, ROSSO, BIANCO } color_t;


    NERO, ROSSO e BIANCO non dovrebbero corrispondere rispettivamente a 0, 1, 2?
  • Re: Funzioni cambio tipo

    Nella prima non devi scrivere a=b non ha senso... Sembra che tu scriva righe a caso finché qualcuno non ti dice il contrario. Bisogna anche comprendere quello che si scrive... Cosa fa a=b ?

    La seconda funzione è bene che restituisca un color_t e non un int anche se quei valori corrispondono a quelli indicati da te.
  • Re: Funzioni cambio tipo

    Devo trasformare un tipo in un altro, quindi per quanto ho capito si fa con un cast, oppure automaticamente scrivendo a=b, a diventa un char?
    Nella seconda funzione deve restituire un intero... è un esercizio.

    PS: non sto scrivendo righe a caso finchè uno non mi dice il contrario... o meglio non aspetto la pappa pronta come puoi credere, sto cercando di capire. Non ho voglia di polemizzare ma non ho chiesto di risolvere l'esercizio ma di aiutarmi a capire dove sbaglio, se hai capito questo mi spiace ma non è così.
  • Re: Funzioni cambio tipo

    La trasformazione la fai tramite quelle linee di codice. Qui il cast non c'entra e la a=b non ha senso.
    Ti ripeto, cosa fa a=b secondo te?
  • Re: Funzioni cambio tipo

    Ho inserito la variabile b di tipo char perché pensavo che fosse un modo per cambiare il tipo di a.
    Allora è suffience scrivere per esempio a='N' per avere a di tipo char e fare il return(a)
    
    char color_to_char (color_t a) {    
        if (a==NERO)
            a='N';
        else if (a==ROSSO)
            a='R';
        else if (a==BIANCO)
            a='B';
        else a= '?';
        return (a);
    }
    
  • Re: Funzioni cambio tipo

    No.

    a non cambia tipo. Le variabili non cambiano tipo.
    a è un parametro in ingresso e lo devi solo confrontare con le if, non devi modificarlo.
    b è una variabile char da restituire, con avevi fatto prima.

    La sola riga a=b non ha senso e non la devi usare
  • Re: Funzioni cambio tipo

    Ok ho capito, grazie
Devi accedere o registrarti per scrivere nel forum
10 risposte