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

不使用数组从文件读取数据实现栈的代码调试求助

解决方案

核心实现思路

  • 逐行读取StackData.txt中的数据,无需预先统计行数
  • 解析每行的数字和任务字符串,构造UserData实例
  • 直接调用栈的PushStack函数将数据存入栈,全程不使用数组

修正后的主测试代码

#include <stdio.h>
#include <string.h>
#include "Stack.h"
#include "UserData.h"

int main() {
    Stack stack;
    InitializeStack(&stack);

    FILE* file = fopen("StackData.txt", "r");
    if (file == NULL) {
        printf("Failed to open file.\n");
        return 1;
    }

    int id;
    char task[50];
    // 逐行读取直到文件结束,无需硬编码行数
    while (fscanf(file, "%d %s", &id, task) == 2) {
        UserData data;
        // 根据UserData的定义初始化数据
        data.id = id;
        strcpy(data.task, task);
        PushStack(&stack, data);
    }

    fclose(file);

    // 验证栈中数据(出栈打印)
    printf("Stack contents (top to bottom):\n");
    while (!IsStackEmpty(&stack)) {
        UserData data = PopStack(&stack);
        printf("%d %s\n", data.id, data.task);
    }

    DestroyStack(&stack);
    return 0;
}

关键细节说明

  • 文件读取:用fopen打开文件并判断是否成功;通过fscanf的返回值判断是否读取到有效数据,避免依赖feof的潜在问题
  • 数据解析:%d %s格式符完美匹配文件中每行的数字+字符串结构,确保每次读取完整的一组数据
  • 栈操作:严格使用栈提供的标准接口(InitializeStack/PushStack/IsStackEmpty/PopStack/DestroyStack),完全不修改栈的实现代码

编译错误排查要点

  • 必须包含stdio.h(文件操作)和string.h(字符串复制),以及栈和用户数据的头文件
  • 检查UserData的成员定义:确保task是足够长度的字符数组,避免字符串复制时越界
  • 确认PushStack的参数类型与UserData匹配:如果栈接口要求传入指针,需调整为PushStack(&stack, &data)(根据你的Stack.h定义修改)
  • 确保所有栈函数的调用格式正确,比如传递栈指针而非栈实例本身

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:56:06