C语言,有个程序不太理解,求大神指教.

#defineBUFSIZE3charbuf[BUFSIZE];intbufp=0;intgetch(void)//geta(possiblepushedback)cha... #define BUFSIZE 3

char buf[BUFSIZE];
int bufp = 0;

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

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

这两个函数是干什么的?
为什么想知道的是为什么要用着两个函数,直接getchar()不就行了,干嘛要用这个缓冲。。。。
展开
 我来答
luhongyou0511
2013-10-06 · TA获得超过735个赞
知道小有建树答主
回答量:273
采纳率:100%
帮助的人:205万
展开全部
#define BUFSIZE 3 //宏定义BUFSIZE等于3

char buf[BUFSIZE]; //定义一个3元素的一维数组buf[]
int bufp = 0; //定义一个变量bufp并赋值为0
int getch(void) //从数组buf[]或者getchar()返回一个字符
{
return (bufp > 0) ? buf[--bufp] : getchar(); //bufp大于0则bufp减1并返回buf[bufp],否则调
//用getchar()函数
}
void ungetch(int c) //检查数组是否已满,已满则显示字符过多并退出函数,不满则将c装入
//数组
{
if(bufp >= BUFSIZE) //如果bufp大于3(见宏定义)
printf("ungeth: too many characters\n"); //输出设备显示“ungeth: too many characters”并回车
else
buf[bufp++] = c; //否则bufp加一并把形参c的值赋给buf[bufp]
}
追问
这每一条语句我都明白,但是为什么要用这两个函数,这两个函数在输入过程中是用来做什么工作的?
追答
你没有把全部程序贴出来,很难判断是做什么用的。按我的推断的话,这个应该是一个3个字符的缓存器程序。第一个函数是用做输入缓存,第二个是用作输出缓存。
百度网友5fec05bed
2013-10-06
知道答主
回答量:23
采纳率:0%
帮助的人:19.5万
展开全部
return (bufp > 0) ? buf[--bufp] : getchar();

简化:
if (bufp>0)
{
--bufp;
return buf[bufp];

}
else
{
return getchar();

}

buf[bufp++] = c;
简化:

buf[bufp] = c;
bufp++;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
是经费和
2013-10-06 · TA获得超过1648个赞
知道小有建树答主
回答量:1584
采纳率:0%
帮助的人:723万
展开全部
#define BUFSIZE 3

char buf[BUFSIZE];
int bufp = 0;

int getch(void) //从buf[]中返回栈顶的数据, 当栈为空时, 返回从键盘输入的数据
{
    return (bufp > 0) ? buf[--bufp] : getchar();
}

void ungetch(int c) //将一个数据压入栈中, 并检查是否溢出
{
    if(bufp >= BUFSIZE)
        printf("ungeth: too many characters\n");
    else
        buf[bufp++] = c;
}
//总的来说这个程序模拟是出栈入栈操作
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
羊丑
2013-10-06
知道答主
回答量:35
采纳率:0%
帮助的人:8.2万
展开全部
简单的判断而已,这应该只是程序的一部分吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式