在学习二叉树时候发现了这个问题,只找到了解决方法,但没搞懂为什么,有哪位大佬知道可以评论下。
#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;
}
我认为上面两个函数应该都可以的,一个是用引用做形参传入,另一个是返回指针,都能起到效果,但不同的输入单个字符函数在这两个函数里不能都有效,我在网上查找也没找到原因,望解答。