#include<stdio.h>
#include<malloc.h>

#defineMAXSIZE1024
typedefchardatatype;
typedefstructnode
{
datatypedata;
structnode*lchild,*rchild;
}bitree;

bitree*CREATE()
{
bitree*Q[MAXSIZE];
bitree*root,*s;
datatypech;
intfront,rear;
front=1;
rear=0;
root=NULL;
while((ch=getchar())!='#')//输入'#'结束二叉树建立
{
s=NULL;
if(ch!='@')
{
s=(bitree*)malloc(sizeof(bitree));
s->data=ch;
s->lchild=NULL;
s->rchild=NULL;
}
rear++;
Q[rear]=s;
if(rear==1)
{
root=s;
}
else
{
if(Q[front]&&s)
{
if(rear%2==0)
{
Q[front]->lchild=s;
}
else
Q[front]->rchild=s;
}


if(rear%2==1)
front++;
}
}
returnroot;
}

intmain(void)
{
bitree*root;
root=CREATE();
}

linux下运行程序,输入abc#
结果得到的二叉树并不是a
bc
b结点没有了,
进入单步调试
在第1个getchar那里
step
输入a,回车
没有问题,得到结点
循环回到getchar,step或者直接输入b直接就跳过getchar,结点也没有建立,为什么呢?怎么解决这个问题?




5 个解决方案

#1


因为输入了一个字符后,没有清空缓冲区。里面还含有回车符或者空格符,当下一次进去的时候,getchar就是刚才的符号,所以不会再次接受字符。应该刷新一次。如果在VC下用fflush(stdin);

......
if(rear%2==1)
front++;

}
fflush(stdin);
}
returnroot;
}

更多相关文章

  1. 数据结构-java与c实现带头结点的单链表

随机推荐

  1. Python数据可视化:啥是佩奇
  2. 用Python自动化生成倒计时图片
  3. 一网打尽 JavaScript 的作用域[每日前端
  4. Python数据科学:线性回归
  5. 【学习】考完PMP后 继续学软考!
  6. 用Python自动化生成爱豆日历
  7. 用Python清除文件夹中的重复视频
  8. Deno 核心指南[Git搬运工]
  9. 人物社交网络分析—平凡的世界
  10. 用Node.js把HTML转成PDF格式[每日前端夜