2017-04-06 11 views
-1

ご迷惑をおかけして申し訳ありません。エラーを見つけようとするためのトラブルシューティングを行っていて、私は空になっています。Cでリストをアルファベット順に並べ替え、追加入力

入力のリストをアルファベット順に並べ替えるプログラムを作成する必要があります。最初の入力は、入力数の整数値です。各入力は改行文字で終わります。

int main() 
{ 
    int word_total; 
    char word_in[100][30], t[30]; 
    int i, j; 

    printf("\nPlease the number of words you wish to sort: \n"); 
    scanf("%d", &word_total); 

    printf("\nPlease enter a single word at a time. After each word, press return.\n"); 

    for (i = 0; i < (word_total); i++) 
    { 
     scanf("%s\n", word_in[i]); 
    } 

    for (i = 1; i < (word_total); i++) 
    { 
     for (j = 1; j < (word_total); j++) 
     { 
      if (strcmp(word_in[j - 1], word_in[j]) > 0) 
      { 
       strcpy(t, word_in[j - 1]); 
       strcpy(word_in[j - 1], word_in[j]); 
       strcpy(word_in[j], t); 
      } 
     } 
    } 

    printf("\nSorted list:\n"); 
    for (i = 0; i < (word_total); i++) 
    { 
     printf("%s\n", word_in[i]); 
    } 
    printf("\n"); 
} 

問題:単語の入力にはword_total + 1が必要です。たとえば、word_total = 5の場合、6単語を入力する必要があります。入力された最後の単語は無視され、「ソートされたリスト」には含まれません。私は問題を次のように修正することができます: "Sorted list"は短い1語です。私は "<"を "< ="などに変更しようとしましたが、修正が見つかりませんでした。

ありがとうございました!その任意のの空白文字、実際の手段を注意してください。

答えて

2

問題は、それが別の非空白文字を見つけるまでによる"\n"に、(文字列次以上の空白を読みしようとしている、

scanf("%s\n", word_in[i]); 

のようです任意の数の空白文字; \ nは、期待通りに1つの改行に一致しません)。 scanf形式から"\n"を削除して、改行をgetchar()またはそれに類するもので食べてください。

PS:scanf()の戻り値をテストしても問題がないことを確認していません。

+0

彼は改行を食べる必要はありません。次の 'scanf()'は '%s'がそれを行うので、それを自動的にスキップします。 –

+0

@JohnBollinger良い点! – Jens

関連する問題