c语言静态链表无法成功赋值

整个算法是为了使用静态链表建树
** scanf("%c %d %d", &t[i].data, &cl, &cr);**这一行出了问题。无法正常赋值,不知道怎么回事。调试如下:图片说明
以cl为例,赋值而之后,左边调试框里面还是一个垃圾值。
大神能不能帮我看下怎么回事?
谢谢!
代码ru'xia

#include<stdio.h>

#define maxsize 5
#define Null -1

struct treenode{
    char data;
    int left;
    int right;  
};
typedef struct treenode tree;
int buildtree(tree t[]);

int main(){
    tree t1[maxsize], t2[maxsize];//用结构体定义了两个结构数组,用来存储树 
    int r1, r2, i;//r1 r2 代表的是t1,t2结构数组中根节点的下标 
    r1 = buildtree(t1);
    r2 = buildtree(t2);
    for(i=0; i<maxsize; i++){
        printf("%c %d %d\n", t1[i].data, t1[i].left, t1[i].right);
    }
    return 0;
} 

int buildtree(tree t[]){
    int n,i;//n代表树的节点数量 
    int check[maxsize] = {0};//用来检查谁是根节点 

    printf("你要输入数量\n");
    scanf("%d", &n);
    if(n){
    for(i=0; i<n; i++){ 
        int cl, cr;//用来记录左孩子与右孩子的值 
        printf("请输入字母 左孩子 右孩子\n");
**      scanf("%c %d %d", &t[i].data, &cl, &cr);**
        printf("%c %d %d", t[i].data, cl, cr);
        if(cl!=-1){//如果左孩子存在,该节点的左孩子被赋值,并且记录到check数组,来证明这不是一个孤儿。 
            t[i].left = cl;
            check[t[i].left] = 1;                       
        }else
            t[i].left = -1;
        if(cr!=-1){
            t[i].right = cr;
            check[t[i].right] = 1;                      
        }else
            t[i].right = -1;    
    }
    }
    else
        return -1;

    for(i=0; i<maxsize; i++)
        if(!check[i])
            break;
    return i;   
}

2个回答

因为

scanf("%d", &n);

实际上输入了一个数字和一个回车
所以在紧接着的

scanf("%c %d %d", &t[i].data, &cl, &cr);

里面,c就接收了这个回车,然后……奇怪的事情就出来了。
可以改成

scanf("%d\n", &n);
.....
scanf("%c %d %d\n", &t[i].data, &cl, &cr);

或者每次scanf后都

fflush (stdin);

释放一下输入缓冲……

Weite_Zhang
Weite_Zhang scanf("%c %c %c", &ele, &l, &r); fflush(stdin); trec[i].element = ele;//接受本节点字母 if(l!='-') { trec[i].left = l - '0';//注意此处不要写成 'l'-0 如此结果便成了 108-0=108 check[trec[i].left] = 1; }在我使用l-’0‘之后,这个程序就不能正常输入了。这是怎么回事呢?
4 个月之前 回复
Weite_Zhang
Weite_Zhang 我想继续追问一个问题:
4 个月之前 回复
Weite_Zhang
Weite_Zhang 感谢回复,问题已经解决了
5 个月之前 回复
foomow
茂大叔独立游戏开发 回复贵阳开挖机的数马善福程序写得最好: 好吧,见面分一半……这笔买卖就这么定了。
5 个月之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 好吧,回答了才看到你的回答
5 个月之前 回复

fflush(stdin); //前面加上
scanf("%c%d%d", &(t[i].data), &cl, &cr);

foomow
茂大叔独立游戏开发 回复贵阳开挖机的数马善福程序写得最好: 加了,还没通过……
5 个月之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复茂大叔独立游戏开发: 加群 283054981 就等你一个了
5 个月之前 回复
foomow
茂大叔独立游戏开发 咋地,抢我生意是不是?
5 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!