烟萝。。。 2022-12-16 09:53 采纳率: 75%
浏览 42
已结题

c语言中所遇到的一些小问题

#include<string.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    char Name[20];         //* 姓名
    char NameChar;         //* 姓的拼音的首字母
    int Age;               //* 年龄
    char Job[20];          //* 职业
    char Friends[50][20];  //* 好友列表
}Person;
typedef struct
{
    Person *data;
    struct BSTree *lchild;
    struct BSTree *rchild;
}BSTree;

void InsertBST(BSTree *T,Person P)
{
    BSTree *s = (BSTree *)malloc(sizeof(BSTree));
    if(!T)
    {
        s->lchild = s->rchild =NULL;
        s->data->NameChar = P.NameChar;
        strcpy(P.Name,s->data->Name);
        T = s;
        return 1;
    }
    else if(P.NameChar < s->data->NameChar)
        InsertBST(T->lchild,P);
    else if(P.NameChar > s->data->NameChar)
        InsertBST(T->rchild,P);
}
void CreateBSTree(BSTree *T,int Num,Person *P)
{
    T = NULL;
    for(int i=0;i<Num;i++)
        InsertBST(T,P[i]);
}
BSTree* SearchBST(BSTree *T,char c)
{
    if(T==NULL||c==T->data->NameChar )
        return T;
    else if(c < T->data->NameChar)
        SearchBST(T->lchild,c);
    else
        SearchBST(T->rchild,c);
}



void main()
{
    /**初始化社交网络的节点的值**/
    printf("请输入该社交网络中的人数:\n");
    int Num;                                //* 社交网络中的人数
    int i;
    scanf("%d",&Num);
    Person Pinfo[Num];
    for(i=0;i<Num;i++)
    {
        printf("请输入第%d个人的名字:\n",i+1);
        scanf("%s",Pinfo[i].Name);
        getchar();
        printf("请输入%s的姓氏的拼音的首字母(小写):\n",Pinfo[i].Name);
        scanf("%c",&Pinfo[i].NameChar);

        printf("请输入%s的年龄:\n",Pinfo[i].Name);
        scanf("%d",&Pinfo[i].Age);
        printf("请输入%s的职业:\n",Pinfo[i].Name);
        scanf("%s",Pinfo[i].Job);
        getchar();
    }

    BSTree *T = malloc(sizeof(BSTree)*1);
    CreateBSTree(T,Num,Pinfo);                    //* 构建一棵二叉排序数
    /**查找二叉树**/
    char c;
    BSTree *t;
    printf("请输入你要查找的对象的姓氏的首字母(小写)");
    scanf("%c",c);
    t = SearchBST(T,c);
    if(t)
        printf("查找成功,结果为%\n",t->data->Name);
    else
        printf("查找失败\n");

    system("pause");

}

img


就标黄的那一句是为什么啊。(应该是错那里了)

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2022-12-16 13:01
    关注

    修改完善如下,改动处见注释,供参考:

    #include<string.h>
    #include <stdio.h>
    #include <stdlib.h>
    typedef struct
    {
        char Name[20];         //* 姓名
        char NameChar;         //* 姓的拼音的首字母
        int Age;               //* 年龄
        char Job[20];          //* 职业
        char Friends[50][20];  //* 好友列表
    }Person;
    typedef struct _BSTree     //修改
    {
        Person* data;
        struct _BSTree* lchild;  //修改
        struct _BSTree* rchild;  //修改
    }BSTree;
    void InsertBST(BSTree** T, Person P)   //修改
    {
        //BSTree* s = (BSTree*)malloc(sizeof(BSTree)); //修改
        if (!(*T))  //修改
        {
            (*T) = (BSTree*)malloc(sizeof(BSTree));  //修改
            (*T)->lchild = (*T)->rchild = NULL; //s->lchild = s->rchild = NULL; 修改
            Person* s = (Person*)malloc(sizeof(Person));  //修改
            s->NameChar = P.NameChar;    //s->data->NameChar = P.NameChar;      修改
            strcpy(s->Name, P.Name); //strcpy(P.Name, s->data->Name);          修改
            (*T)->data = s;  //T = s; 修改
            return; // 1;  修改
        }
        else if (P.NameChar < (*T)->data->NameChar)  //(P.NameChar < s->data->NameChar) 修改
            InsertBST(&(*T)->lchild, P);       
        else if (P.NameChar > (*T)->data->NameChar)  //(P.NameChar > s->data->NameChar) 修改 
            InsertBST(&(*T)->rchild, P);           //修改
    }
    void CreateBSTree(BSTree** T, int Num, Person* P) //修改
    {
        (*T) = NULL;   //修改
        for (int i = 0; i < Num; i++)
            InsertBST(&(*T), P[i]);   //修改
     }
    BSTree* SearchBST(BSTree* T, char c)
    {
        if (T == NULL || c == T->data->NameChar)
            return T;
        else if (c < T->data->NameChar)
            SearchBST(T->lchild, c);
        else
            SearchBST(T->rchild, c);
    }
    void main()
    {
        /**初始化社交网络的节点的值**/
        printf("请输入该社交网络中的人数:\n");
        int Num;             //* 社交网络中的人数
        int i;
        scanf("%d", &Num);
        Person Pinfo[100];      //修改  Person Pinfo[Num]; 
        for (i = 0; i < Num; i++)
        {
            printf("请输入第%d个人的名字:\n", i + 1);
            scanf("%s", Pinfo[i].Name);
            getchar();
            printf("请输入%s的姓氏的拼音的首字母(小写):\n", Pinfo[i].Name);
            scanf("%c", &Pinfo[i].NameChar);
            printf("请输入%s的年龄:\n", Pinfo[i].Name);
            scanf("%d", &Pinfo[i].Age);
            printf("请输入%s的职业:\n", Pinfo[i].Name);
            scanf("%s", Pinfo[i].Job);
            getchar();
        }
        BSTree* T = NULL;      //(BSTree*)malloc(sizeof(BSTree)); //BSTree* T = malloc(sizeof(BSTree) * 1); 修改
        CreateBSTree(&T, Num, Pinfo); //修改
        /**查找二叉树**/
        char c;
        BSTree* t;
        printf("请输入你要查找的对象的姓氏的首字母(小写):");
        scanf(" %c", &c); //修改
        t = SearchBST(T, c);
        if (t)
            printf("查找成功,结果为%s\n", t->data->Name);
        else
            printf("查找失败\n");
        system("pause");
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月16日
  • 已采纳回答 12月16日
  • 创建了问题 12月16日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看