求助:死循环力【悲】

P1449 后缀表达式

Starkiller123 @ 2023-07-14 17:40:46

#include<bits/stdc++.h>
using namespace std;
stack<int>m;
char ch[100];
int x,y;
int main()
{
    int i=1;
    while(ch[i]!='@')
    {
        cin>>ch[i];
        i++;
    }
    int a=0,b=0,c;
    i=1;int j;
    while(ch[i]!='@')
    {
        j=i;
        while(ch[j]!='.'&&ch[j]!='@')
        {
            if(ch[j]<='9'&&ch[j]>='0')
            {
                a=ch[j]-'0';
                c=b*10+a;
            }
            b=a;
            j++;
        }
        m.push(c);
        switch(ch[i])
        {
            case '+':x=m.top();m.pop();y=m.top();m.pop();m.push(x+y);break;
            case '-':x=m.top();m.pop();y=m.top();m.pop();m.push(y-x);break;
            case '*':x=m.top();m.pop();y=m.top();m.pop();m.push(x*y);break;
            case '/':x=m.top();m.pop();y=m.top();m.pop();m.push(y/x);break;
        }
        i=j+1;
    }
    cout<<m.top();
    return 0;
} 

by wei_chen_wang @ 2023-07-15 14:49:20

@Starkiller123

    int i=1;
    while(ch[i]!='@')
    {
        cin>>ch[i];
        i++;
    }

改为:

    int i = 0;
    while (ch[i] != '@') {
        i++;
        cin >> ch[i];
    }

by wei_chen_wang @ 2023-07-15 14:58:09

因为:

开始i=1,ch[i(也就是1)]=输入项,接着i++。

所以你的代码while判断的是ch[i+1(也就是2)],可你的ch输入的是[i]项。

结论:

    int i=1;
    while(ch[i]!='@')
    {
        cin>>ch[i];
        i++;
    }

ch数组输入的是i,while判断的是i+1,ch数组的[i+1]还未输入,所以while循环会一直执行。


|