无法弄清楚函数是如何被调用的。
Input 1 2 3 + + [Enter] //注意输入之间有空格
输出 6 //这是正确的
1 -> 当程序编译时,while 语句调用函数 getop(s)。
2 -> 在 getop() 函数中,它将调用 getch() 函数,该函数又调用 getchar() 所以在这一步它将读取 1 作为输入并返回它。
3 - >现在它检查c是否为数字,这是真的,所以它会再次调用读取空间的getch(),返回它的值,现在它检查它是否是数字,它被评估为假,然后它移动到下一个声明。
4 -> 最后 ungetch() 将被执行,将 1 保存在其缓冲区中
在这一步,我无法弄清楚输入是如何被读取的,以及 getch 和 ungetch 的用途是什么
#define MAXOP 100
#define NUMBER '0'
int getop(char[]);
void push(double);
double pop(void);
main()
{
int type;
double op2;
char s[MAXOP];
while((type=getop(s))
{
switch(type)
{
//Here all operation are performed as push pop addition etc.
//This part of code is simple
}
}
push 和 pop 函数的定义很简单所以我就不写了
#include<ctype.h>
int getch(void);
void ungetch(int);
int getop(char s[]) {
int i,c;
while((s[0]=c=getch())==' '||c=='\t');
s[1]='\0';
if(!isdigit(c)&&c!='.')
return c;
i=0;
if(isdigit(c))
while(isdigit(s[++i]=c=getch()));
if(c=='.')
while(isdigit(s[++i]=c=getch()));
s[i]='\0';
if(c!=EOF)
ungetch(c);
return NUMBER;
}
#define BUFSIZE 100
char buf[BUFSIZE];
int bufp=0;
int getch(void) {
return (bufp>0)?buf[--bufp]:getchar();
}
void ungetch(int c) {
if(bufp>=BUFSIZE)
printf("ungetch:too many character\n");
else
buf[bufp++]=c;
}