我通过scanf
函数从用户输入中获取了一个字符串。该字符串是名为listlexicographicDepartment
的递归函数的常数参数。后者在获取字符串后立即调用。
char *dep = malloc(500);
printf("enter the department to search for any courses in itn");
scanf("%s", dep);
listlexicographicDepartment(dep,temp);
这样的函数是递归的,停止条件取决于它的第二个参数,AVL树的一个节点(没有提供AVL树是为了(i)保持代码样本的限制,(ii)因为它在这方面是无关的)。字符串dep
在整个递归执行过程中永远不会改变:
void listlexicographicDepartment (char *dep, AVLNode t)
{
printf("%sn",dep);
if(t != NULL)
{
listlexicographicDepartment(dep, t->Left);
if(strcmpi(dep, t->Department) == 0)
printf("%sn", t->Course);
listlexicographicDepartment(dep,t->Right);
}
}
我观察到我的输入字符串在传递给函数时发生了变化。输入:French Language
递归函数的输出:
Language
Language
Language
...
Language
为什么字符串在空格前丢失了所有内容?
不要使用scanf读取字符串。使用fgets
代替:
void printReversed(char *str)
{
if(*str) printReversed(str + 1);
printf("%c", *str);
}
int main(void)
{
char *str = malloc(200);
if(str)
{
fgets(str, 200, stdin);
printReversed(str);
}
free(str);
}
https://godbolt.org/z/daqbqaf3h