tout d'abord, pour clarifier quelque chose, EOF
n'a pas à être spécifiquement -1. La norme ISO C exige qu'elle ait une valeur négative.
Notez également que le type char
peut être signé ou non signé; cela est défini par l'implémentation.
La fonction fgetc
, getc
et getchar
peut être utilisée pour traiter des flux binaires, pas seulement des flux de texte. Les octets ont des valeurs comprises entre 0 et UCHAR_MAX
. Le type naturel pour cette gamme est unsigned char
. La valeur de retour de getc
ne peut pas être unsigned char
, car EOF
ne peut pas être représenté. Il ne peut pas être signed char
non plus, car signed char
ne peut pas contenir les valeurs comprises entre 0 et UCHAR_MAX
. Ainsi, un type plus large est choisi: le type int
. Sur les plates-formes grand public, int
est plus large que char
: il a une taille d'au moins 2. Et donc il est capable de représenter une valeur négative qui peut être utilisée pour EOF
, et toutes les valeurs d'octets dans la gamme 0 à UCHAR_MAX
.
Dans certaines implémentations C (pour des systèmes tels que certaines puces DSP), cela n'est pas vrai: int
est un octet de large. Cela représente des défis. Sur une telle implémentation C, une plage de valeurs d'octets valides renvoyées par getc
doit simplement être négative, et l'une de ces valeurs se heurte à EOF
. Le code écrit avec soin peut indiquer que c'est le cas: une valeur égale à EOF
a été retournée, mais les fonctions feof
et ferror
rapportent faux: le flux n'est pas dans l'erreur, et la fin du fichier ne s'est pas produite. Ainsi, la valeur qui ressemble à EOF
est en réalité un octet valide.
Alors que se passe-t-il quand quelqu'un tape le caractère dont le code est '-1' –
imprime juste -1, je l'ai essayé aussi .. Je pense que quand getChar() renvoie -1, c'est différent, il suffit de taper -1 clavier! @ M.M –
J'ai dit le caractère dont le code est '-1', pas les caractères' -' et '1' –