Я учусь K & классический C книга по программированию второго издания R, вот пример на странице 17:путаница междунар, полукокса и EOF в C
#include <stdio.h>
/* copy input to output*/
main()
{
int c;
// char c works as well!!
while ((c = getchar()) != EOF)
putchar(c);
}
это указано в книге, что int c
используется удерживать EOF
, что оказывается -1
на моей машине Windows с GCC и не может быть представлено char
. Однако, когда я пробовал char c
, он работает без проблем. Любопытно я попробовал несколько больше:
int a = EOF;
char b = EOF;
char e = -1;
printf("%d %d %d %c %c %c \n", a, b, e, a, b, e);
и выход -1 -1 -1
без какого-либо символа отображается (на самом деле в соответствии с ASCII-таблицей для %c, c
здесь должна быть nbs(no-break space)
отображается, но она невидима).
Итак, как можно присвоить char
EOF
без какой-либо ошибки компилятора?
Кроме того, учитывая, что EOF
является -1
, оба b
и e
выше назначен FF
в памяти? Не должно быть иначе, как компилятор отличает EOF
и nbs
...?
Update:
скорее всего EOF 0xFFFFFFFF
отливают char 0xFF
но в (c = getchar()) != EOF
и LHS 0xFF
является INT повышен до 0xFFFFFFFF
перед сравнением с тем типом c
может быть int
или char
.
В этом случае EOF
случается 0xFFFFFFFF
но теоретически EOF
может быть любым значением, которое требует более 8 бит, чтобы правильно представлять с левым большинством байт не обязательно являющихся FFFFFF
так, то char c
подхода потерпит неудачу.
Ссылка: K & R Язык программирования C 2е
мне кажется нравится -1 подходит просто отлично в знаковом 8bit целое (полукокс). можете ли вы опубликовать все заявление? потому что «EOF не может быть представлен char», кажется мне неправильным. также ASCII только 0-127, nbs является частью * extended ascii * – x4rf41
Возможный дубликат [Использование int для типов символов при сравнении с EOF] (http://stackoverflow.com/questions/8464030/using-int-for- character-types-when-comparing-with-eof) – Downvoter
Вам нужно каким-то образом различать '0xFF' и' EOF', иначе C не будет работать с двоичными файлами, содержащими байты со значением '0xFF' , Вот почему функции типа 'getchar()' возвращают целочисленные значения. –