Архив выпускников
 
Уважаемые гости нашего сайта!

Мы рады приветствовать Вас!

Спешим сообщить Вам, этот сайт планировался как место встречи выпускников ТРТИ/ТРТУ/ТТИ ЮФУ, но не стал таковым.

Не теряйте друзей! Будьте на связи!


та переменной длины. Здесь и возникают массивы указателей. Если подлежащие сортировке сроки хранятся одна за другой в длин ой нами в главе 4; она назы- вается UNGETC. В результате обра
 личный от цифры, число не закончено. Но при этом программа
   считывает один лишний символ, символ, для которого она еще не
   подготовлена. Эта проблема была бы решена, если бы было бы возможно
   "прочесть обратно" нежелательный символ. Тогда каждый раз, прочитав
   лишний символ, программа могла бы поместить его об- ратно в файл ввода
   таким образом, что остальная часть прог- раммы могла бы вести себя так,
   словно этот символ никогда не считывался. к счастью, такое неполучение
   символа легко имми- тировать, написав пару действующих совместно
   функций. Функ- ция GETCH доставляет следующий символ ввода, подлежащий
   рас- смотрению; функция UNGETCH помещает символ назад во ввод, так что
   при следующем обращении к GETCH он будет возвращен. То, как эти функции
   совместно работают, весьма просто. Функция UNGETCH помещает
   возвращаемые назад символы в сов- местно используемый буфер, являющийся
   символьным массивом. Функция GETCH читает из этого буфера, если в нем
   что-либо имеется; если же буфер пуст, она обращается к GETCHAR. При
   этом также нужна индексирующая переменная, которая будет фиксировать
   позицию текущего символа в буфере. Так как буфер и его индекс совместно
   используются функ- циями GETCH и UNGETCH и должны сохранять свои
   значения в пе- риод между обращениями, они должны быть внешними для
   обеих функций. Таким образом, мы можем написать GETCH, UNGETCH и эти
   переменные как: #DEFINE BUFSIZE 100 CHAR BUF[BUFSIZE]; /* BUFFER FOR
   UNGETCH */ INT BUFP = 0; /* NEXT FREE POSITION IN BUF */ GETCH() /* GET
   A (POSSIBLY PUSHED BACK) CHARACTER */ { RETURN((BUFP > 0) ? BUF[--BUFP]
   : GETCHAR()); } UNGETCH(C) /* PUSH CHARACTER BACK ON INPUT */ INT C; {
   IF (BUFP > BUFSIZE) PRINTF("UNGETCH: TOO MANY CHARACTERS\N"); ELSE BUF
   [

Автоматические массивы не могут быть инициализированы. Внеш-


Страница помощи