You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言多栈实现作业跟踪系统时不同栈存储值互相串扰问题排查

问题根因

代码的核心问题是4个独立栈共用了同一个全局top变量,所有栈的入栈、出栈、遍历逻辑都基于同一个计数,才会出现跨栈的冗余0值。

修复步骤
  • 第一步:替换全局top变量,为每个栈单独配置独立的计数变量
    将原代码中int top = -1;替换为:
int top1 = -1, top2 = -1, top3 = -1, top4 = -1;
  • 第二步:修改栈操作函数,新增对应栈的top指针作为入参(因为要修改top的值需要传指针)
    所有用到top的函数都做对应修改,示例如下:
// 修改后的push函数
void push(int st[], int *top, int item) {
    if (*top == MAXSIZE - 1) {
            printf("\n You Have a lot of Assignments Due, GET WORKING!!!");
    } else {
            *top = *top + 1;
            st[*top] = item;
    }
}

// 修改后的pop函数
int pop(int st[], int *top) {
    int item;
    if (*top == -1) {
            printf("Great Work No Assignment Are Pending");
            return 0;
    } else {
            item = st[*top];
            *top = *top - 1;
    }
    return item;
}

peek、display、sort函数同理,所有原代码中用到top的位置替换为*top,入参加上int *top即可。

  • 第三步:在各个科目对应的操作函数中,调用栈操作时传入对应栈自己的top地址
    以ds科目的操作为例,修改后调用逻辑如下:
// 入栈调用
push(st1, &top1, item1);
// 出栈调用
item1 = pop(st1, &top1);
// 查看栈顶调用
item1 = peek(st1, &top1);
// 打印调用
display(st1, &top1);
// 排序调用
sort(st1, &top1);

dsgt、cg、math三个科目对应替换为自己的st数组和top变量即可,比如dsgt用st2和&top2,cg用st3和&top3,math用st4和&top4。

内容的提问来源于stack exchange,提问作者Vatsal Gandhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:24:03