被问到的问题是评估RPN表达式,并将=作为序列的终止字符,以便程序运行RPN并计算给出的表达式。所以我遇到一些麻烦是理解我应该如何将字符转换为整数,如指令特别指出的那样使用scanf(“%c”,& ch),它将输入作为字符而不是整数。如何将我的角色转换为整数,以便我可以将它们推送到数组并相应地对它们执行操作?逆向波兰语表示法疑难解答C
//
// input: 1 2 3 * + =
// output: 7
//
#include <stdio.h>
#include <stdlib.h>
int collection[100];
int top;
void push(double v){
if (top>99)
{
printf ("Stack Overflow\n");
exit(0);
}
collection[++top]=v;
}
double pop(){
double v;
if(top < 0)
{
printf("stack underflow\n");
exit(0);
}
v=collection[--top];
return v;
}
int main(void){
char ch;
double a,b,c,sum;
int i;
top=-1;
printf("Enter an RPN expression: ");
while(ch!='='){
scanf("%c", &ch);
i=0;
c=1;
push(ch);
if(collection[i]=='+'){
a=pop();
b=pop();
c=b+a;
push(c);
}
else if(collection[i]=='-'){
a=pop();
b=pop();
c=b-a;
push(c);
}
else if(collection[i]=='*'){
a=pop();
b=pop();
c=b*a;
push(c);
}
else if(collection[i]=='/'){
a=pop();
b=pop();
c=b/a;
push(c);
}
else{
while(collection[i]!=0){
i++;
}
i=i-1;
sum=0;
while(i>=0){
sum=sum+((collection[i]-48)*c);
c=c*10;
i--;
}
push(sum);
}
}
printf("%lf\n",c);
}
标题和代码都与问题无关。如果您需要帮助将字符转换为整数,请在标题中说明。顺便说它是波兰语,而不是“极地”。 –
当您推入堆栈(或附加到数组)时,首先访问数组,然后递增:'arr [n ++]'。当你弹出堆栈时,你减少fisrt,然后访问数组。 'ARR [ - n]的'。这是因为'n'是数组之外的索引。你有前错误的。 –
请注意''printf(“%lf \ n”,c);''其中'c'属于'char'类型会导致不快乐; '%lf'转换规范需要一个'double'参数,而不是'int'(这是'char'值将被提升到的类型)。 –