C语言抽象数据类型代码报错:结构体直接比较编译错误求助
问题原因
C语言不支持直接用==运算符比较自定义结构体类型。结构体属于复合数据类型,编译器没有默认的相等比较逻辑,因此直接使用==会触发编译错误。
解决方案
1. 实现结构体相等判断函数
手动编写一个函数,逐个比较结构体的每个成员。注意字符数组类型的participantName必须用strcmp比较内容(直接用==会比较数组地址,而非字符串内容)。
#include <string.h> // 引入strcmp所需头文件 bool isItemEqual(tItemL a, tItemL b) { // 依次比较结构体的三个成员 return (strcmp(a.participantName, b.participantName) == 0) && (a.numVotes == b.numVotes) && (a.EUParticipant == b.EUParticipant); }
2. 修改findItem函数逻辑
将原代码中用==比较结构体的位置,替换为调用上述判断函数。同时修正原逻辑的错误:原循环条件会跳过目标元素,正确逻辑应为遍历到目标元素或列表末尾时停止。
tPosL findItem(tItemL d, tList L) { tPosL t; if (L.lastPos == LNULL) { return LNULL; } else { t = first(L); // 遍历直到找到目标元素或列表结束 while (t != LNULL && !isItemEqual(L.data[t], d)) { t = next(t, L); } // 检查是否找到目标元素 return (t != LNULL) ? t : LNULL; } }
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

