почему на языке C EOF IS -1? - PullRequest
       9

почему на языке C EOF IS -1?

3 голосов
/ 31 декабря 2010

на языке c я использую EOF ..... почему EOF IS -1? почему не другое значение?

Ответы [ 5 ]

10 голосов
/ 31 декабря 2010

Из Википедия :

Фактическое значение EOF зависит от системы (но обычно равно -1, например, в glibc ) и не соответствует никакому действительному символьному коду.

Это не может быть любое значение в 0 - 255, потому что это допустимые значения для символов в большинстве систем. Например, если EOF были 0, вы не смогли бы определить разницу между чтением 0 и достижением конца файла.

-1 - очевидный оставшийся выбор.

Вы также можете рассмотреть возможность использования feof вместо:

Поскольку EOF используется для сообщения как о конце файла, так и о случайных ошибках, часто лучше использовать функцию feof для явной проверки конца файла и ferror для проверки на наличие ошибок.

4 голосов
/ 31 декабря 2010

Это не так. Он определяется как заданная реализацией отрицательная константа int. Он должен быть отрицательным, чтобы его можно было легко отличить от unsigned char . в большинстве реализаций это действительно -1, но это не требуется стандартом C.

Историческая причина выбора -1 заключалась в том, что функции классификации символов (см. ) могут быть реализованы в виде простого поиска в массиве. И это «ближайшее» значение, которое не помещается в неподписанный символ.

[Обновление:] Эффективность функций классификации персонажей, вероятно, не была главной причиной выбора -1 в первую очередь. Я не знаю всех исторических деталей, но это самое очевидное решение. Это должно было быть отрицательно, поскольку есть машины, чей тип char не имеет ровно 8 бит, поэтому выбор положительного значения будет затруднен. Оно должно быть достаточно большим, чтобы оно не было допустимым значением для unsigned char, но достаточно маленьким, чтобы помещаться в int. И когда вам нужно выбрать отрицательное число, почему вы должны взять произвольно большое отрицательное число? Это оставляет -1 как лучший выбор.

0 голосов
/ 29 ноября 2014

Легко вы можете изменить значение EOF.В программе на C определите макрос для EOF = -1 по умолчанию, поэтому вы упоминаете EOF в своей программе, что компилятор c по умолчанию присваивает значение -1;

например;

Просто попробуйтеи получить результат

#include <stdio.h>
#define EOF 22
main()
{
   int a;
   a=EOF;
   printf(" Value of a=%d\n",a);
}

Вывод:

Значение a = 22 * ​​1010 *

Причина:

В это время значение EOF изменяется

0 голосов
/ 29 марта 2012
int c;

c = getchar();
while(!feof(stdin) && !ferror(stdin)) {
  ...
  c = getchar();
}

Вы должны быть осторожны, чтобы учесть влияние конца файла или ошибки на любые тесты, которые вы делаете для этих значений.Рассмотрим этот цикл, предназначенный для сканирования всех символов до следующего полученного символа пробела:

int c;

c = getchar();
while(!isspace(c)) {
  ...
  c = getchar();
}

Если EOF возвращается до того, как какой-либо пробел обнаружен, этот цикл может никогда не завершиться (так как это не символ пробела),Лучший способ написать это:

int c;

c = getchar();
while(!feof(stdin) && !ferror(stdin) && !isspace(c)) {
  ...
  c = getchar();
}

Наконец, стоит отметить, что, хотя EOF обычно равен -1, все стандартные обещания состоят в том, что это отрицательная целочисленная константа с типом int.

0 голосов
/ 31 декабря 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...