不使用数组从文件读取数据实现栈的代码调试求助
解决方案
核心实现思路
- 逐行读取
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
相关产品推荐
相关产品推荐

