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

C语言类型不兼容报错:int与struct相互赋值问题及代码求助

解决C语言中int与struct类型赋值不兼容的问题

嘿,我一眼就瞅出问题所在了——你遇到的赋值时类型不兼容错误,核心原因是选择排序函数里用来临时存数据的temp变量类型完全不对!

先看你代码里的问题片段:

void selection_sort(struct protein protein_powders[], int n) {
    int i, largest = 0, temp; // 这里temp被定义成了int类型
    if (n == 1) return;
    for (i = 1; i < n; i++)
        if (protein_powders[i].averageReview < protein_powders[largest].averageReview)
            largest = i;
    if (largest < n - 1) {
        temp = protein_powders[largest]; // 这里试图把struct protein类型的值塞给int,编译器当然要报错!
        // 后面你肯定还打算把temp赋值回结构体数组,这同样会触发类型不匹配的错误
    }
}

问题拆解

你要交换的是struct protein类型的数组元素,但你把临时变量temp定义成了int——这俩类型八竿子打不着,编译器肯定不允许这种跨类型赋值呀。

修正方案

把temp的类型改成struct protein就行,这样它就能正确存储结构体数据,完成交换操作了。我帮你把整个排序函数修正好了:

void selection_sort(struct protein protein_powders[], int n) {
    int i, largest = 0;
    struct protein temp; // 改成结构体类型的临时变量
    if (n == 1) return;
    for (i = 1; i < n; i++) {
        if (protein_powders[i].averageReview < protein_powders[largest].averageReview) {
            largest = i;
        }
    }
    if (largest != n - 1) { // 这里把<改成!=逻辑更准确,避免多余的交换
        // 直接交换两个结构体元素,C语言原生支持结构体赋值
        temp = protein_powders[largest];
        protein_powders[largest] = protein_powders[n - 1];
        protein_powders[n - 1] = temp;
    }
    // 递归处理剩下的元素
    selection_sort(protein_powders, n - 1);
}

小提示

C语言里结构体是可以直接赋值的,不用手动逐个成员复制,这样写不仅简洁,还不容易出错~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:32:29