2016-05-13 16 views
1

私はvecを整理するためにqsortを使用しようとしています。しかし、cmpfuncに問題があります。 vecは構造体のvecです。構造体は非常にシンプルで、文字列と数値を持っています。そして私は数で整理したいと思う。qsortを使ってstruct(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);

私はあなただけであなたはそれが常に関係なく、何を得ることができるという機能の下部にリターンを必要とするif文の内部リターンを持っているこのwarning: control reaches end of non-void function [-Wreturn-type] }

+0

あなたの警告に関して、テスト値が* equivalent *で、したがってこれらの 'return'ステートメントのどちらも*どちらも*発生しない場合、あなたの関数は何を返すと思いますか? – WhozCraig

答えて

0

を得る:

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; 'は、より小さい、より大きい、等しいすべての3つのケースをカバーし、それぞれ-1,1および0を返します。 – WhozCraig

+0

良い点。私はその1つを削除します – Steve

関連する問題