在C中按字母顺序排列一个列表,额外输入

时间:2017-04-06 17:53:11

标签: 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]);
    }

但是“排序列表”只有一个字。我试过改变“&lt;”到“&lt; =”等,但还没找到修复。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

问题似乎是

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

,由于"\n",将尝试在字符串后面读取更多的空格(直到找到另一个非空格;注意任何空白字符实际上意味着任何空白字符数; \ n与您显然期望的单个换行符不匹配)。您应该从scanf格式中删除"\n"并使用getchar()或类似内容来换行换行符。

PS:没有测试scanf()的返回值是否有问题。