qsort比较器函数不对整个数组进行排序(将1个元素排除)

Gui*_*des 1 c gcc qsort comparator

相关代码(索引是数组的大小):

typedef struct elemento {
    unsigned long linha;
    unsigned long coluna;
    double valor;
} elemento; 

elemento Representados[MAXN];
qsort(Representados, index, sizeof(Representados[0]), lcomparator);

int lcomparator(const void *el1, const void *el2) {
    int l1 = ((elemento *)el1)->linha;
    int l2 = ((elemento *)el2)->linha;
    int c1 = ((elemento *)el1)->coluna;
    int c2 = ((elemento *)el2)->coluna;

    if (l1 < l2) {
        return -1;
    }
    else if (l1 == l2) {
        if (c1 < c2) {
            return -1;
        }
        else if (c1 == c2) {
            return 0;
        }
        else if (c2 > c1) {
            return 1;
        }
    }
    else {
        return 1;
    }

}
Run Code Online (Sandbox Code Playgroud)

gcc还打印出lcomparator的'control reach end'警告,但是我看不出我的函数怎么可能不返回任何东西.

Sta*_*eur 6

else if (c2 > c1) {
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

是错的,应该是

else if (c1 > c2) {
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

或更好

else {
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

当然要替换intunsigned long