teio931226 2023-03-29 11:32 采纳率: 100%
浏览 62
已结题

在openjudge提交时出现Runtime Error

本地调试时没有问题,但在openjudge上提交时出现了Runtime Error错误,查了一下可能的原因好像是有什么东西越界或者溢出了,尝试改了一下还是会Runtime Error,请问到底是哪里出了问题呢😭
下面是题目和代码:

img



```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;
}

```

  • 写回答

2条回答 默认 最新

  • Yamerger 2023-03-29 14:02
    关注

    Runtime Error通常是因为程序在运行过程中发生了一些异常错误,例如数组越界、空指针引用等。在本地运行没有问题,但在openjudge上出现错误,可能是因为openjudge测试数据不同于你本地的测试数据,可能包含了一些你没有考虑到的特殊情况,导致程序出错。

    你可以在程序中加入一些边界判断和异常处理,例如检查数组下标是否越界,检查指针是否为空,以及检查输入是否合法等。另外,你也可以尝试将程序的错误信息输出到标准错误流中,这样可以更方便地找到问题所在。你可以在程序中使用fprintf(stderr, "error message\n")将错误信息输出到标准错误流中。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月9日
  • 已采纳回答 4月1日
  • 创建了问题 3月29日

悬赏问题

  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题