运行环境:vs2022;
问题背景:写一个家谱的操作系统
现象:函数参数为字符串数组时传递参数失败
问题相关代码
我的解答思路和尝试过的方法 、
感觉是insertfnc()函数没有接受到传递的参数
我试着改了一下形参名字,或者改成将参数形式改成char fname[MAX],也没有用
看了网上一些讲这个内容的,感觉自己应该没有写错。难道是错在其他地方了吗?
源码如下:
/有没有很懂孩兄二叉树的兄弟,后面功能还有好多疑问,这是摘取了一部分功能调试,如果您愿意帮忙指点一二真的感激不尽!(付费咨询也可
以),自己解决问题的效率太伤了/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include<windows.h>
#define MAX 10
typedef struct
{
int generation;
char name[MAX];
int sex;//1为男,0为女
}DataType;
//此为数据域的类型定义,若想实现更多的数据要求,应在此加入更多数据类型的定义。
typedef struct Node
{
DataType person;
struct Node* lchild, * rbrother, * father;
}node, * tree;
//利用孩兄弟表示法来表示每个结点。
tree createNode();
void insertfnc(char);
tree find(tree, char);//寻找到对应姓名对应的结点并用全局变量指针记录
void create();
//int NamePreOrderTraverse(tree T, char name[20]);
tree BT=NULL;
tree p=NULL;
int main()
{
p = (tree)malloc(sizeof(node));
create();
return 1;
}
void create()
{
printf("请遵从提示从大到小插入家谱中的人物(先输入者必是年龄大者):\n");
char name[MAX];
char fname[MAX];
BT=createNode();
printf("\n您已完成创建根节点");
int flag = 0;//标记是否继续输入。
while (!flag)
{
printf("\n输入“0”继续插入新的成员,输入其他退回主界面\n");
scanf_s("%d", &flag);
getchar();
if (!flag)
{
printf("\n输入新成员父亲姓名:");
scanf_s("%s", fname, sizeof(fname)+1);
getchar();
printf("插入之前:%s",fname);
insertfnc(fname);
}
}
}
tree createNode()
{
tree q = (tree)malloc(sizeof(node));
printf("请输入被添加成员的姓名(长度小于5个字):");
char name[MAX];
scanf_s("%s",name,MAX); getchar();
strcpy_s(q->person.name,MAX,name);
q->person.generation = 1;
q->person.sex = 1;
q->rbrother = NULL;
q->lchild = NULL;
q->father = NULL;
return q;
}
void insertfnc(char *fname)
{
printf("到这还是好好的\n");
printf("插入中:%s", fname);
tree son=(tree)malloc(sizeof(node));
p=find(BT,fname);
if (!p) {
printf("插入失败,查无其父\n按回车键以继续...");
getchar();
system("cls");
return;
}
son=createNode();
son->father = p;//完成对插入点信息的补充
son->person.generation = p->person.generation + 1;
printf("请输入插入者的性别(1为男性,0为女性):");
scanf_s("%d", &(son->person.sex));
getchar();
if (p->lchild == NULL) p->lchild = son;
else {
tree bro = p->lchild;
while (bro->rbrother != NULL) bro = bro->rbrother;
son = bro->rbrother;
}
printf("插入成功!");
return;
}
tree find(tree A, char name[MAX])
{
if (!A) return NULL;
else
{
printf("确实是%s\n", A->person.name);
if (strcmp(A->person.name, name) == 0)
{
return A;
}
/* else return find(A->lchild, name);
if(strcmp(A->person.name,name)!=0) return find(A->rbrother, name);*/
}
}