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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:15:31