2017-04-06 67 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個字。輸入的最後一個字被忽略,不包含在「分類列表」中。我可以通過以下方式解決問題:

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

但是「排序列表」是短的一個單詞。我試過將「<」更改爲「< =」等,但還沒有找到修復程序。

謝謝你的幫助!

回答

2

的問題似乎是

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

其中,由於"\n",將試圖讀取該字符串後面更多的空白(直到它找到另一個非空白;請注意,任何空白字符實際上意味着任意數量的空白字符; \ n與您顯然期望的只有一個換行符不匹配)。您應該從scanf格式中刪除"\n",並使用getchar()或類似的命令進行換行。 PS:不測試從scanf()返回的值是不是很麻煩。

+0

他甚至不需要吃換行符。下一個'scanf()'會自動跳過它(和任何其他前導空格),因爲'%s'就是這樣做的。 –

+0

@JohnBollinger好點! – Jens

相關問題