流行音乐推减法和除法

时间:2014-06-22 02:33:09

标签: c stack switch-statement

我正在阅读K& R的C编程。所以,我遇到了pop& amp;推。将东西推到堆栈上并从堆栈中弹出一些东西。本书中的计算器程序通常会增加两个弹出值,但在后面的情况下会出现问题,即减法和除法。我读了这本书的解释。然而,它在我的脑海中产生了一点模棱两可。将弹出的值存储到另一个变量中的用途是什么,该值仍然保持不变。不是吗?

此外,我有一个与该主题无关的疑问:如果一个' 0'如果我们键入' 8',则ASCII值为48。这两个字符没有相同的值。那么,第一种情况怎么会出现在' 1'中的任何一个数字中。到' 9'除了' 0'?

#include <stdio.h>
#include <stdlib.h>

#define MAXOP 100   /* max size of the operand & operator */
#define NUMBER '0'  /* signal that a number was found */

int getop(char []);  
void push(double);
double pop(void);

/*reverse polish calculator*/
main()
{
int type;
double op2;
char s[MAXOP];

while((type= getop(s)) != EOF) {      
switch (type) {

case NUMBER :      <------- case 1 '0' how would this case run if other than '0' ?
push(atof(s));
break;

case '+':
push(pop() + pop());
break;

case'*': 
push(pop() * pop());
break;

case '-':
op2= pop();
push(pop() - op2);
break;

case '/': 
op2= pop();
push(pop() / op2);
break;

/* there are printf statements and default statements so not writing those */
}
}
return 0;
}

1 个答案:

答案 0 :(得分:2)

C标准没有规定评估算术操作数的顺序。因此,分配是为了保证为非交换运算符-\执行弹出的顺序。对于可交换运算符+*,流行音符的顺序并不重要,因此简短的代码肯定会起作用。

关于NUMBER的问题,您必须研究getop()的代码。毫无疑问,如果在输入上发现任何号码,它将返回'0',无论该号码是什么。