int getch(void);
void ungetch(int);
/* getop: get next character or numeric operand */
int getop(char s[])
{
int i, c;
while ((s[0] = c = getch()) == ' ' || c == '\t')
;
s[1] = '\0';
if (!isdigit(c) && c != '.')
return c; /* not a number */
i = 0;
if (isdigit(c)) /* collect integer part */
while (isdigit(s[++i] = c = getch()))
;
if (c == '.') /* collect fraction part */
while (isdigit(s[++i] = c = getch()))
;
s[i] = '\0';
if (c != EOF)
ungetch(c);
return NUMBER;
}
#define BUFSIZE 100
char buf[BUFSIZE]; /* buffer for ungetch */
int bufp = 0; /* next free position in buf */
int getch(void) /* get a (possibly pushed-back) character */
{
return (bufp > 0) ? buf[--bufp] : getchar();
}
void ungetch(int c) /* push character back on input */
{
if (bufp >= BUFSIZE)
printf("ungetch: too many characters\n");
else
buf[bufp++] = c;
}
Приведенный выше код от K & Р.Уточнение в объявлении массива
В приведенном выше коде, я вижу массив buf[]
используется для максимального индекса 1, но определяется как размер 100. Является ли определение «ОК» или существует огромная потеря памяти?
Я в значительной степени думаю, что это плохой стиль программирования.
Я прошу getop() Func, а не для общего Геч() и ungetch()
Я новичок, и я извиняюсь, если мой вопрос неверен: P
"* Я вижу, что массив buf [] используется с максимальным индексом 1 *" - Где? –
Что делать, если вы вызываете 'ungetch' 2 или более раз? Так нет, это не пустая трата памяти? Это позволяет вернуть все символы обратно в буфер. –
Mohit Jain и Cool Guy, простите меня за то, что вы не публикуете полный код. Теперь он обновляется с полным кодом – ThunderPunch