关于scanf指令跳过执行的问题。单步调试时正确的 。纠结好长时间

运行前两步是正确的,第三步就不正确了我用的是vi 编辑器 调试gdb
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int TElemType;
typedef int Status;
`
typedef struct BiTNode
{
TElemType data;

struct BiTNode lchild,*rchild;
}BiTNode,*BiTree;
int i=0;//用来测试递归的层
Status CreateBiTree(BiTree *T)

{
i++;
printf("The%d level\n", i);

char ch;
scanf("%c",&ch);

setbuf(stdin,NULL);//用来清空输入缓存的数据

if(ch==' ')
(*T)=NULL;
else
{
if(!(*T=(BiTNode
)malloc(sizeof(BiTNode))))
exit(0);
(*T)->data=ch;

CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
return 1;
}
void main()
{
BiTree root;
CreateBiTree(&root);
printf("success");

}
`