程序直接停止工作了?

P1449 后缀表达式

sunyining28 @ 2023-12-04 18:01:52

我是犯了什么非常低级的重大的错误吗 编译过了 我输入第一个样例 打了一个enter 然后他跟我说程序未响应 停止工作……

这是本蒟蒻的代码 请大佬指教(✿◡‿◡)

帮忙解决了悬赏一个关注 谢谢

#include<bits/stdc++.h>
using namespace std;
char c;
int num,x,y;
stack<int> s;
int main(){
    while(cin>>c&&c!='@'){
        if(c!='+'&&c!='-'&&c!='*'&&c!='/'&&c!='.') num=num*10+c-'0';
        else{
            x=s.top();
            s.pop();
            y=s.top();
            s.pop();
            if(c=='+') s.push(x+y);
            else if(c=='-') s.push(y-x);
            else if(c=='*') s.push(x*y);
            else if(c=='/') s.push(y/x);
            else{
                s.push(num);
                num=0;
            }
        }
    }
    cout<<s.top();
    return 0;
}

by derekyang326 @ 2023-12-04 18:23:03

你不应该是直接输入一整个样例还使用一个字符来存,应该用字符串输入


by 2022xsj @ 2023-12-04 18:26:14

请注意:你的stack在最开始是空的! 我们拿样例一举例子:\ 3.5.2.-*7.+@

输入3\ 此时: num=3\ s -> {}(空)

输入.、 此时: 你首先取了s.top()\ 但是此时s -> {}(空) 这时s.top()指向了一个不存在的空间,这就导致程序发生错误,你可以看到控制台有一句这样的话:\

Process exited after 12.14 seconds with return value 3221225477

by sunyining28 @ 2023-12-11 11:57:06

@2022xsj 知道了知道了,谢谢大佬


by sunyining28 @ 2023-12-11 11:57:38

@derekyang326 好的,谢谢大佬


|