被問到的問題是評估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'值將被提升到的類型)。 –