这里在这段代码中我创建了一个二叉树,直到用户想要节点数。 但是当从用户那里获得输入时,它会在某处失败..
struct node *createTree(struct node *root)
{
int n;
char ch;
struct node *t1;
t1=(struct node *)malloc(sizeof(struct node));
printf("Enter Element\n");
scanf("%d",&n);
if(root==NULL)
{
t1->data=n;
t1->left=NULL;
t1->right=NULL;
root=t1;
}
printf("do you want to add node at left?\n");
这不能正常工作
的scanf( “%C”,&安培; CH);
if(ch=='y')
{
t1->left=createTree(t1->left);
}
printf("do you want to add node at right?\n");
scanf("%c",&ch);
if(ch=='y')
{
t1->right=createTree(t1->right);
}
return root;
}
答案 0 :(得分:1)
这样做:
printf("do you want to add node at right??!\n");
scanf("%c",&ch);
while (getchar()!='\n'); //<-- eat up trailing newline chars - Reads all characters of the line until the end of line is found.
当您输入键盘输入后按Enter键时,缓冲区中会留下一个尾随的换行符,scanf
上的下一个呼叫将会读取。
答案 1 :(得分:1)
你必须在scanf中的%c之前给出一个空格
scanf(" %c",&ch);
这是因为在输入后我们按下输入,输入存储在缓冲区中,我们的程序再次读取,有时我们清除我们刷新输入/输出缓冲区,你可以在Linux fflush()
查看我认为功能也是如此,有很多方法,但这是我所知道的最简单的方法。
希望对你有用。