为了账号安全,请及时绑定邮箱和手机立即绑定

关于逆波兰表示法中的getop()函数

关于逆波兰表示法中的getop()函数

C
qq_不睡觉的怪叔叔_0 2016-08-25 19:46:10
《C程序设计语言》中63-67页提到了逆波兰表示法其中它举了一个使用逆波兰表示法来实现计算器程序的例子,其中有个getop()函数,代码如下,我对这个函数有点看法与疑问,都写在代码的右边,请教大神解答一下,拜谢!#include<ctype.h>int getch(void);      //取一个字符(可能是压回缓冲器的字符)void ungetch(int);    //把字符压回到输入中int getop(char s[]){ int i,c; while((s[0]=c=getch())==' '||c=='\t')  //从取的字符中跳过空格或制表符         1, 为什么要把取到的字符赋值给s[0]呢?后  ;                                                                                                                    面s[0]不是也要被覆盖吗? s[1]='\0'; if(!isdigit(c)&&c!='.')      //不是数,返回字符  return c; i=0; if(isdigit(c))  while(isdigit(s[++i]=c=getch()));   //收集整数部分                                        2,在while语句前面是不是要先把当前的c   ;                                                                                                                    赋值给s[0]再收集整数部分呢?    if(c=='.')  while(isdigit(s[++i]=c=getch()));  //收集小数部分   ; s[i]='0'; if(c!=EOF)  ungetch(c);  //将超前多读入的输入中的字符压回输入中 return NUMBER;}#define BUFSIZE 100char buf[BUFSIZE];  //用于ungetch函数的缓冲区int bufp=0;         //缓冲区中下一个空闲位置int getch(void){ return (bufp>0)?buf[--bufp]:getchar();     //如果缓冲区不为空,则取缓冲区的值}void ungetch(int c){ if(bufp>=BUFSIZE)  printf("ungetch:too many characters\n");  //如果缓冲区满了,报错 else  buf[bufp++]=c;                             //如果缓冲区未满,将字符压回缓冲区}
查看完整描述

目前暂无任何回答

  • 0 回答
  • 1 关注
  • 1576 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信