Non sono andato a leggere il paragrafo di libro che citi, ma credo che la
risposta sia semplice.
La funzione getchar() prendere un carattere da standard input, che
normalmente è la tastiera.
Di fatto i valori che possono essere inseriti da tastiera sono in numero
piuttosto limitato.
Ti faccio un esempio. Se ricordo bene, la lettera "A" corrisponde
all'intero 65.

Usando un tipo char stai, di fatto, usando una variabile intera senza segno
da 1 byte, che può contenere valori da 0 a 256. E questo è sempre vero.
Quando usi int, invece, la dimensione dipende dal sistema, dal compilatore,
etc... In un sistema Linux a 32bit mi aspetto che si di 4 byte, mentre in
un sistema a 64 bit sia di 8 byte.
Mi pare di ricordare che, per default, un int abbia il segno. Quindi in 4
byte ci sta da -2 miliardi circa a +2 miliardi circa.

Quindi, tornando all'esempio della lettera "A", questa sta dentro benissimo
sia in un int che in un char. Diverso sarebbe se tu potessi andarce a
mettere in quel char qualcosa di valore superiore a 256

Sto pensando ad un modo per farti passare un valore superiore in quella
variabile senza modificare il tuo codice, ma non mi viene in mente nulla.


Claudio

2018-02-15 5:51 GMT+01:00 Carlo Stemberger <[email protected]>:

> Buongiorno corsisti,
> dubbio riguardo al paragrafo 1.5.1 del K&R.
>
> Il motivo per cui il tipo scelto per la variabile c sia "int" mi è chiaro.
> Ho anche verificato le relative dimensioni in byte col seguente programmino
> (se ci sono castronerie segnalatemele):
>
> -----
> #include <stdio.h>
>
> int main()
> {
>     printf("EOF\tchar\tint\n");
>     printf("%d\t%d\t%d\n", sizeof(EOF), sizeof(char), sizeof(int));
>     return 0;
> }
> -----
>
>
> Il cui output è:
>
> -----
> EOF    char    int
> 4    1    4
> -----
>
>
> Domanda: perché usando il tipo "char" al posto di "int" tutto mi funziona
> regolarmente?
>
> -----
> #include <stdio.h>
>
> int main()
> {
>     char c;
>
>     c = getchar();
>     while (c != EOF)
>     {
>         putchar(c);
>         c = getchar();
>     }
>
>     return 0;
> }
> -----
>
>
> Mi sarei aspettato un crash, o qualcosa di molto brutto...
>
> Grazie!
>
> Carlo
>
> _______________________________________________
> BrigX Linux Users Group
> [email protected]
> http://brigx.it/mailman/listinfo/ml_brigx.it
>
> Proponi la tua idea per una delle nostre serate: http://brigx.it/feedback
>
_______________________________________________
BrigX Linux Users Group
[email protected]
http://brigx.it/mailman/listinfo/ml_brigx.it

Proponi la tua idea per una delle nostre serate: http://brigx.it/feedback

Rispondere a