对不起补救问题。一直在排除故障,试图找到错误,我已经空了。
我需要编写一个按字母顺序排列输入列表的程序。第一个输入是输入数的整数值。每个输入都以换行符结束。
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; =”等,但还没找到修复。
感谢您的帮助!
答案 0 :(得分:2)
问题似乎是
scanf("%s\n", word_in[i]);
,由于"\n"
,将尝试在字符串后面读取更多的空格(直到找到另一个非空格;注意任何空白字符实际上意味着任何空白字符数; \ n与您显然期望的单个换行符不匹配)。您应该从scanf格式中删除"\n"
并使用getchar()
或类似内容来换行换行符。
PS:没有测试scanf()的返回值是否有问题。