【问题标题】:Alphabetizing a list in C, extra input [duplicate]在C中按字母顺序排列列表,额外输入[重复]
【发布时间】:2017-04-06 17:53:11
【问题描述】:

很抱歉提出补救问题。一直在排除故障以尝试查找错误,但我发现是空的。

我需要编写一个按字母顺序排列输入列表的程序。第一个输入是输入数量的整数值。每个输入都以换行符结束。

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");
}

问题:words的输入取word_total + 1。比如word_total = 5,我要输入6个words。输入的最后一个单词将被忽略并且不包含在“排序列表”中。我可以通过以下方式解决问题:

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

但是“排序列表”只是一个单词。我尝试将“

感谢您的帮助!

【问题讨论】:

    标签: c


    【解决方案1】:

    问题好像是

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

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

    PS:不测试scanf()的返回值是自找麻烦。

    【讨论】:

    • 他甚至不需要吃换行符。下一个 scanf() 将自动跳过它(以及任何其他前导空格),因为 %s 会这样做。
    • @JohnBollinger 好点!
    猜你喜欢
    • 2020-03-29
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 2017-05-19
    • 2013-10-18
    • 1970-01-01
    • 2018-09-15
    相关资源
    最近更新 更多