о функции getchar в C - PullRequest
       3

о функции getchar в C

3 голосов
/ 20 июля 2011

Я читаю книгу по языку K & RC, следующий фрагмент кода:

char c;
while ((c = getchar()) != EOF) ...

Было упомянуто, что для EOF (я думаю, что это -1) это возвращаемое значение «вне диапазона» из getcharВ отличие от всех возможных значений, которые может вернуть getchar.

Мои вопросы следующие:

  1. Я запустил свою программу с char, и она прошла успешно, и мое понимание signed char canсохранить от -127 до +127, чтобы он мог проверить -1, как "вне диапазона"?
  2. Может ли кто-нибудь привести простой пример, где приведенный выше фрагмент программы потерпит неудачу, если мы используем char c вместо int c?

Спасибо!

Ответы [ 3 ]

6 голосов
/ 20 июля 2011

У вас небольшая ошибка, getchar возвращает int, а не char:

int c;
while ((c = getchar()) != EOF) ...

Допустимые значения для символов ascii от 0 до 127, EOF - это другое значение(int) value.

Если вы продолжите использовать char, вы можете столкнуться с проблемами (как Я попал в )

5 голосов
/ 20 июля 2011

Ну, на ваш вопрос ответили в C FAQ .

Возможны два режима отказа, если, как и во фрагменте выше, getchar's возвращаемое значение присваивается символу.

  • Если тип char подписан и если EOF определено (как обычно) как -1, символ с десятичным значением 255 ('\ 377' или '\ xff' в C) будет быть расширенным знаком и будет сравниваться равным EOF, преждевременно
    завершение ввода.

  • Если тип char без знака, фактическое значение EOF будет усечено (на отбрасывание его битов старшего порядка, вероятно, приведет к 255 или 0xff) и не будет распознано как EOF, что приведет к фактически бесконечному вводу.

2 голосов
/ 20 июля 2011

Независимо от того, какое значение имеет EOF, зависит от вашей платформы. Взгляните и на stdio.h, чтобы увидеть его фактическое определение.

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