后缀表达式陷入死循环问题

为什么用这段代码解决后缀表达式会陷入死循环啊?
问题:所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。

如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@。’@’为表达式的结束符号。‘.’为操作数的结束符号。

注:仅包含-、+、*、/运算,其中/是整除。操作数均是int范围内正整数且计算过程中不会超过int范围。

#include 

using namespace std;
struct stack2{

int *elem;
int top_p;

void setup(){
  elem=new int [10000];top_p=-1;

}
void clear(){
    delete [] elem;

}
    bool isEmpty(){
        return top_p==-1;

    }
    void push(int x){
    elem[++top_p]=x;
    }
    int pop(){
    return elem[top_p--];

    }
    int top(){
    return elem[top_p];
    }
};
int main()
{

    stack2 S;
    S.setup();

     char arr [10000]={};
    cin>>arr;



    int i=0;
    while (arr[i]!='@')
    {
        if(arr[i]>='0'&&arr[i]<='9') S.push(int(arr[i]));
        if(arr[i]=='.') continue;
        if(arr[i]=='+') {
            int i=S.pop();
            int j=S.pop();
            int a=j+i;
           S.push(a);

        }
         if(arr[i]=='-') {
            int i=S.pop();
            int j=S.pop();
            int a=j-i;
           S.push(a);

        }
         if(arr[i]=='*') {
            int i=S.pop();
            int j=S.pop();
            int a=j*i;
           S.push(a);

        }
         if(arr[i]=='/') {
            int i=S.pop();
            int j=S.pop();
            int a=j/i;
           S.push(a);

        }
        i++;
    }
    int p=S.top();
    cout<return 0;
}

if(arr[i]=='.') continue; 这一步导致死循环,在continue之前,要加上i++;才行,否则永远陷入这个if条件了