• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

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

《C程序设计语言》中63-67页提到了逆波兰表示法
其中它举了一个使用逆波兰表示法来实现计算器程序的例子,其中有个getop()函数,代码如下,我对这个函数有点看法与疑问,都写在代码的右边,请教大神解答一下,拜谢!

#include
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='0';
if(c!=EOF)
  ungetch(c);  //将超前多读入的输入中的字符压回输入中
return NUMBER;
}
#define BUFSIZE 100
char 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;                             //如果缓冲区未满,将字符压回缓冲区
}

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

发新帖

发布任务需求已有1031166位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!