本地调试时没有问题,但在openjudge上提交时出现了Runtime Error错误,查了一下可能的原因好像是有什么东西越界或者溢出了,尝试改了一下还是会Runtime Error,请问到底是哪里出了问题呢😭
下面是题目和代码:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct op{
char ch[1005];
int top;
};
struct data{
char data[1005];
int top;
};
char s[1005];
int len;
void add(op *p,data *q){
char a,b,c;
c=p->ch[p->top];
p->top--;
if(c!='!'){
a=q->data[q->top];
q->top--;
b=q->data[q->top];
q->top--;
if(c=='&'){
if(a=='V'&&b=='V'){
q->top++;
q->data[q->top]='V';
}
else{
q->top++;
q->data[q->top]='F';
}
}
else if(c=='|'){
if(a=='F'&&b=='F'){
q->top++;
q->data[q->top]='F';
}
else{
q->top++;
q->data[q->top]='V';
}
}
}
else if(c=='!'){
a=q->data[q->top];
q->top--;
if(a=='V'){
q->top++;
q->data[q->top]='F';
}
else if(a=='F'){
q->top++;
q->data[q->top]='V';
}
}
}
int main(){
op *p=(op*)malloc(sizeof(op));
p->top=-1;
data *q=(data*)malloc(sizeof(data));
q->top=-1;
while(fgets(s,1005,stdin)){
len=strlen(s);
for(int i=0;i<len-1;i++){
if(s[i]=='V'||s[i]=='F'){
q->top++;
q->data[q->top]=s[i];
}
else if(s[i]=='('||s[i]=='!'||p->top==-1){
p->top++;
p->ch[p->top]=s[i];
}
else if(s[i]=='&'){
if(p->ch[p->top]=='('||p->ch[p->top]=='|'){
p->top++;
p->ch[p->top]=s[i];
}
else{
while(p->ch[p->top]!='('&&p->ch[p->top]!='|'){
add(p,q);
if(p->top==-1) break;
}
p->top++;
p->ch[p->top]=s[i];
}
}
else if(s[i]=='|'){
if(p->ch[p->top]=='('){
p->top++;
p->ch[p->top]=s[i];
}
else{
while(p->ch[p->top]!='('){
add(p,q);
if(p->top==-1) break;
}
p->top++;
p->ch[p->top]=s[i];
}
}
else if(s[i]==')'){
while(p->ch[p->top]!='('){
add(p,q);
}
p->top--;
}
}
while(p->top!=-1){
add(p,q);
}
printf("%c\n",q->data[q->top]);
}
free(p);
free(q);
return 0;
}
```