почему моя версия ungetch() и getch() была неправильной?

долго ищу в нете. но бесполезно. пожалуйста, помогите мне.

      /* getch and ungetch to handle EOF Character In all the ungetch and getch 
* functions written so far, the buf is declared as char buf[BUFSIZ]. 
* Changing this to int buf[BUFSIZ] enable it to handle EOF. As EOF is an 
* integer declared in stdio.h having the value -1 */ 
#include<stdio.h> 
#define BUFSIZE 100 
int getch(void); 
void ungetch(int c); 

char buf[BUFSIZE]; /* buffer for ungetch */ 
int bufp = 0; /* next free position in buf */ 
int main(void) 
{ 
    int c; 

    c = '*'; 

    ungetch(c); 
    while((c=getch())!=EOF) 
        putchar(c); 
    return 0; 
} 

/* getch: get a (possibly pushed back) character */ 
int getch(void) 
{ 
    return (bufp > 0) ? buf[--bufp] : getchar(); 
} 

/* ungetch: push a character back onto the input */ 
void ungetch(int c) 
{ 
    if (bufp >= BUFSIZE) 
        printf("ungetch: too many characters \n"); 
    else 
        buf[bufp++] = c; 
}

я хотел использовать указатель для достижения того же эффекта. Но я потерпел неудачу (неправильные коды следующие). Bufp = bufимеет ошибку. Ошибка заключалась в том, что Bufp: другой уровень между косвенностью int и char*. По моему ограниченному опыту работы с указателем, тип указателя Bufpchar*, он указывает на тип данных char .char buf[BUFSIZE];означает , что buf[] представляет собой массив символов. Если то, что я сказал, было правильным, почему возникла проблема? было что-то, что я проигнорировал?

      char buf[30];
char *Bufp;

Bufp = buf;
int getch(void)
{
    return (Bufp >= buf) ? *(--Bufp) : getchar();
}

void ungetch(int c)
{
    if (c != EOF)
        *Bufp++ = c;
    else
        printf("no space\n");
}

0 ответов

Другие вопросы по тегам