17. Il tipo char

Il tipo char consente di definire una variabile che può contenere un carattere.

I caratteri cui si fa riferimento sono quelli della codifica ASCII. Ciò consente di definire una corrispondenza tra i simboli cui siamo abituati (lettere, cifre, punteggiatura ecc.) e i numeri con cui tali caratteri sono codificati.

Una variabile di tipo char può essere trattata come un tipo numerico, con l'accortezza di trattare numeri nell'intervallo -128;127.

Per leggere dalla tastiera dei caratteri e acquisirli in variabili di tipo char si utilizza la funzione scanf() specificando il formato %c come illustrato di seguito:

char carattere;

scanf("%c", &carattere);


E' anche possibile utilizzare la funzione getchar() che non richiede parametri e restituisce il successivo carattere inserito da tastiera come illustrato di seguito:

char carattere;

carattere=getchar();


Quando si acquisiscono caratteri dalla tastiera (indipendentemente dalla modalità utilizzata, scanf() o getchar()) devono essere considerati anche i cosiddetti caratteri bianchi che nel caso dei dati numerici sono scartati automaticamente perché considerati separatori.

I caratteri bianchi includono lo spazio, il carattere di invio (corrispondente alla sequenza speciale \n), il tabulatore.

Con la scanf() è possibile eliminare i caratteri bianchi pendenti prima di leggere il il carattere successivo con l'istruzione:

scanf(" %c", &carattere);

(Notare lo spazio prima di %c).

In questo caso, tuttavia, il carattere spazio (e gli altri caratteri bianchi) saranno scartati anche se inseriti volontariamente da tastiera.

Esempio 1

Il programma acquisisce un numero da tastiera e successivamente un carattere gestendo correttamente lo spazio bianco pendente, dovuto all'inserimento del numero (in questo caso il carattere pendente è l'INVIO della tastiera).


#include <stdio.h>


int main() 

{

    int n;

    char c;


    printf("Inserire un numero: ");

    scanf("%d", &n);


    printf("Inserire un carattere (una lettera o una cifra numerica): ");

    scanf(" %c", &c);


    printf("E' stato inserito il numero %d e il carattere %c\n", n, c);


    return 0;

}


Esempio 2

Il programma mostra come dichiarare una variabile di tipo char e alcune operazioni che possono essere eseguite su tali variabili.


#include <stdio.h>

int main()

{

    char c1, c2, c3, c4;

    int x;

    c1='A';

    c2='B';

    c3=c2+1;

    printf("%c %c %c\n", c1, c2, c3);

    c3=c2-c1;  // in ASCII i caratteri A e B sono consecutivi

    printf("c3=%d\n", c3);

    c1=80;     // in ASCII 80 -> P

    printf("c1=%c\n", c1);

    c1++;       // in ASCII 81 -> Q

    printf("c1=%c\n", c1);

    printf("Il codice ASCII di %c e' %d\n", c1, c1);

    c2='a'+3;   // il codice di 'a' + 3

    printf("c2=%c\n", c2);

    printf("Il codice ASCII di %c e' %d\n", c2, c2);

    x=c1*2;

    printf("x=%d\n", x);

    c3=-44;

    c2=11;

    c1=c2+c3;

    printf("c1=%d\n", c1);

    printf("Inserire un carattere: ");

    c4=getchar();

    printf("il carattere inserito e': %c\n", c4);

    return 0;

}

Esempio 3

Il seguente programma mostra come può essere trattato l'input da tastiera.


#include <stdio.h>

int main()

{

    char c;

    int i=0;

    printf("Scrivere delle lettere a caso. Premere X e <INVIO> per terminare il programma\n");

    do {

        c=getchar();

        i++;

    } while (c!='x' && c!='X');

    printf("Sono stati inseriti %d caratteri", i);

    return 0;

}