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
