2016-12-05 8 views
0

私は問題があります。qsortはときどきソートしますが、時にはそうではありません。ここでは一例でうまく動作Qsortはchar *配列をソートしません

#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 


static int compare (const void * a, const void * b) 
{ 
    return strcmp (*(const char **) a, *(const char **) b); 
} 

int main(){ 
    int ile = 0; 
    scanf("%d", &ile); 
    const char * slowa[ile]; 
    for(int j = 0; j <= ile; j++){ 
    char string[30]; 
    gets(string); 
    char * toAdd = strdup(string); 
    slowa[j] = toAdd; 
    } 
    qsort (slowa, ile, sizeof (const char *), compare); 

    for (int i = 0; i <= ile; i++) { 
     printf ("%s\n",slowa[i]); 
    } 
    return 0; 
} 

私のコード{CCC、BBB、AAA}が、例えば動作しません{AFDG、sspade、trekk、bbre、笑}だ

+2

あなたは一度多く繰り返しますが、 'j

+0

の可能な複製http://stackoverflow.com/q/5370753/1212012 – purplepsycho

答えて

2

scanfは改行を残しています最初のgetsによって読み取られる入力バッファに格納されます。

2つのループは、あまりにも多くの回数反復し、その境界を超えて配列をインデックスします。私はあなたが正しい入力数を得るためにそれをしたと思います。

最初のループの前に入力をクリアします。おそらくダミーの文字列を読み込み、ループ制御を修正します。

また、gets()は廃止されました。

+0

私はfflush(stdin)ループ制御を修正し、完璧に動作します。ありがとう –

+0

@ Karol.T 'fflush(stdin)'は非標準的な動作であることに注意してください。 –

関連する問題