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()不就行了,干嘛要用这个缓冲。。。。 展开
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()不就行了,干嘛要用这个缓冲。。。。 展开
4个回答
展开全部
#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]
}
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个字符的缓存器程序。第一个函数是用做输入缓存,第二个是用作输出缓存。
展开全部
return (bufp > 0) ? buf[--bufp] : getchar();
简化:
if (bufp>0)
{
--bufp;
return buf[bufp];
}
else
{
return getchar();
}
buf[bufp++] = c;
简化:
buf[bufp] = c;
bufp++;
简化:
if (bufp>0)
{
--bufp;
return buf[bufp];
}
else
{
return getchar();
}
buf[bufp++] = c;
简化:
buf[bufp] = c;
bufp++;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
//总的来说这个程序模拟是出栈入栈操作
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
简单的判断而已,这应该只是程序的一部分吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询