Прототип для getchar
:
int getchar (void);
Возвращает int
, потому что нужно вернуть EOF, который не является символом.
Расширение на этомфункция должна иметь возможность возвращать любой действительный символ, а также иметь возможность возвращать специальный «символ», указывающий, что вы достигли конца файла (или произошла ошибка).
Поскольку тип данных char
может содержать только один из символов, невозможно будет указать этот конец файла, если вся возвращаемая функция была char
.Это потому, что если вы выбрали одно из этих char
значений для представления конца файла, вы не смогли бы определить разницу между концом файла и действительным символом.
Например, давайте выберем 'A ', чтобы указать конец файла.Когда вы на самом деле получаете «A» из getchar()
, как вы узнаете, достиг ли вы конца файла или пользователь действительно ввел «A»?
Чтобы обойти это, многие функциикоторый возвращает вам char
, фактически даст вам int
и использует одно из целочисленных значений, которые не имеют фактического char
эквивалента (например, -1).
В этом случае(при условии 8-битного char
), вы получите либо -1, если вы достигли конца файла, либо значение от 0 до 255 включительно, представляющее введенный символ.
И вам нужно приобрести более современную книгу и более современный компилятор:
#include <stdio.h>
int main (void) {
int ch = getchar();
if (ch != EOF)
printf("You typed: %c\n", ch);
return 0;
}
Почему кто-то все еще использует Borland - это день и эпоха (где gcc является простокак дешево и намного лучше) выше меня.