2017-04-06 63 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

相关问题