почему моя версия 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*. По моему ограниченному опыту работы с указателем, тип указателя Bufp — char*, он указывает на тип данных
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");
}