这是用于对一些给定字符串进行排序的家庭作业。我提示用户输入他们想要排序的字符串的scanf
数量,根据该数字分配一个数组,然后自己获取字符串fgets
。
如果字符串的数量是硬编码的,一切都很好,但是添加scanf
让用户决定把事情搞砸了。这是代码:
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#define LENGTH 20 // Maximum string length.
int main(void)
{
int index, numStrings = 0;
char **stringArray;
printf("Input the number of strings that you'd like to sort: ");
assert(scanf("%d", &numStrings) == 1);
stringArray = (char **)malloc(numStrings * sizeof(char *));
for (index = 0; index < numStrings; index++)
{
stringArray[index] = (char *)malloc(LENGTH * sizeof(char));
assert(stringArray[index] != NULL);
printf("Input string: ");
assert(fgets(stringArray[index], LENGTH, stdin) != NULL);
}
// Sort strings, free allocated memory.
return 0;
}
这是控制台的样子:
输入要排序的字符串数:3 输入字符串:输入字符串:foo 输入字符串:bar
它跳过循环的第一次迭代,在数组的开头产生一个空字符串。我的问题是,为什么会这样,我该如何解决?
"%d\n"
以下是传递给格式字符串的控制台的外观scanf
:
输入要排序的字符串数:3 富 输入字符串:输入字符串:bar 输入字符串:baz
所以,我可以输入所有的字符串,但是字符串的第一个提示是在错误的地方。