题目:
假定最多只压回一个字符。请相应修改getch与ungetch这两个函数。
自我解答:
一种简单的做法是把BUFSIZE的大小定义为1即可。
另外一种做法是不定义数组buf[BUFSIZE],而定义一个char型变量。
char buf;
bool bufState = false;
int getch(void)
{
if(bufState)
{
bufState = false;
return buf;
}
else
return getchar();
}
void ungetch(int c)
{
if(!bufState)
{
buf = c;
bufState = true;
}
else
printf("buf is full\n");
}
解答中用一个bool变量bufState来标识当前的缓冲字符是否可被取出,bufState为true时代表缓冲字符已有值,且被优先取出;若为false,代表没有缓冲字符。
参考答案:
#include <stdio.h>
char buf = 0;
/* getch: get a (possibly pushed back) character */
int getch(void)
{
int c;
if(buf != 0)
c = buf;
else
c = getchar();
buf = 0;
return c;
}
/* ungetch: push character back onto the input */
void ungetch(int c)
{
if(buf != 0)
printf("ungetch: too many characters\n");
else
buf = c;
}