关于二叉树创建时,陷入无终止输入问题

在学习二叉树时候发现了这个问题,只找到了解决方法,但没搞懂为什么,有哪位大佬知道可以评论下。

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
typedef struct BiTNode{
	char data;
	struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
void CreateBiTree(BiTree &T) {     
	char c;
	//c = scanf("%c",&c);       这两种输入方式在这种命名函数中会陷入无终止的输入
	//c = getchar();            后来我改用了cin输入字符就能结束了,ab##c##
	cin >> c;   
	if (c == '#')
		T = NULL;
	else {
		T = (BiTNode*)malloc(sizeof(BiTNode));
		T->data = c;
		CreateBiTree(T->lchild);
		CreateBiTree(T->rchild);
	}
}

后来我尝试修改了下函数形式,用getchar()输入也成功了,但还是没弄明白原理

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
typedef struct BiTNode{
	char data;
	struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
BiTree creatTree() {
	char c;
	BiTNode *T;
	//cin>>c;             在这个函数里cin>>就陷入了无终止输入,getchar()却是可行的,ab##c##
	c=getchar();          
	if (c == '#') {
		T = NULL;
	}
	else
	{
		T = (BiTree)malloc(sizeof(BiTNode));
		T->data = c;
		T->lchild = creatTree();
		T->rchild = creatTree();
	}
	return T;
}

我认为上面两个函数应该都可以的,一个是用引用做形参传入,另一个是返回指针,都能起到效果,但不同的输入单个字符函数在这两个函数里不能都有效,我在网上查找也没找到原因,望解答。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值