我正在阅读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;
}
答案 0 :(得分:2)
C标准没有规定评估算术操作数的顺序。因此,分配是为了保证为非交换运算符-
和\
执行弹出的顺序。对于可交换运算符+
和*
,流行音符的顺序并不重要,因此简短的代码肯定会起作用。
关于NUMBER
的问题,您必须研究getop()
的代码。毫无疑问,如果在输入上发现任何号码,它将返回'0'
,无论该号码是什么。