Weite_Zhang 2019-06-15 14:18 采纳率: 60%
浏览 317
已采纳

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条回答 默认 最新

  • 茂大叔 2019-06-15 16:11
    关注

    因为

    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);
    

    释放一下输入缓冲……

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大