c语言 - 通过scanf获取的字符串在作为函数的参数传递时已被静音



我通过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

最新更新