2016-05-13 48 views
1

我試圖使用qsort組織vec。但我在cmpfunc遇到問題。 vec是結構的vec。該結構非常簡單,它有一個字符串和一個數字。我想按編號組織。使用qsort組織結構(C)的vec

int cmpfunc (const void *a, const void *b) 
    { 
     Item i = *((Item*) a); 
     Item j = *((Item*) b); 
     if (i->acc < j->acc) 
      return 1; 
     if (i->acc > j->acc) 
      return -1; 
    } 

qsort(vec, max, sizeof(Item), cmpfunc);

我得到這個warning: control reaches end of non-void function [-Wreturn-type] }

+0

關於你的警告,你認爲你的函數在測試值是否等於*的情況下返回的結果是什麼,因此這兩個'return'語句都不會觸發? – WhozCraig

回答

0

你只有裏面的if語句,你需要在功能底部的回報收益,它總是可以得到不管是什麼:

int cmpfunc (const void *a, const void *b) 
{ 
    Item i = *((Item*) a); 
    Item j = *((Item*) b); 
    if (i->acc < j->acc) 
     return 1; 
    if (i->acc > j->acc) 
     return -1; 
    return 0; 
} 

或這將工作太:

int cmpfunc (const void *a, const void *b) 
{ 
    Item i = *((Item*) a); 
    Item j = *((Item*) b); 
    if (i->acc < j->acc) 
     return 1; 
    else 
     return -1; 
} 
+0

哦耶..謝謝。愚蠢的問題 – Amanda

+2

注意後者*可以*觸發整數下溢。通常我會這樣做:'return(j-> acc < i-> acc)? -1:i-> acc < j-> acc;',它將覆蓋所有三個較小,較大和相等的情況,分別返回-1,1和0。 – WhozCraig

+0

好點。我會刪除那個 – Steve