如何在节点中插入字符串(由用户输入)? (二叉搜索树)
How to insert a string in a node (as entered by the user)? (Binary Search Tree)
我正在尝试使用 C 创建二叉搜索树。我需要做的是在节点中插入一个 id(仅数字)并将同一节点与名称(字符串)相关联。使用此 ID,我可以使用 InOrder Searching 显示树。
问题是,我得到了(感谢互联网)要插入的号码,进行 InOrder 搜索。
我没有做的是将字符串与节点相关联,即我无法存储名称。我确实在链接列表中找到了执行相同操作的答案,但我似乎不理解代码。请帮帮我。
我发现的是 memset() {我不知道那是什么}并且不知何故我应该使用 stringcpy {我知道这个,但不知道如何应用它}
我的结构代码:
struct node
{
int employeeid;
struct node *left;
struct node *right;
char employeename[100];
}*temp=NULL,*link=NULL;
在我的函数中,我尝试插入名称,但出现错误:
printf("Enter the employee name: ");
gets(name);
temp = (struct node *)malloc(sizeof(struct node));
temp->employeeid = data;
temp->employeename = name;
temp->left = temp->right = NULL;
出错的代码行:
temp->employeename = name;
错误:
error: assignment to expression with array type
我所期望的显然是 运行 的代码。请帮忙。
不能对数组使用 =
运算符。您需要使用 strcpy
、strncpy
或 memcpy
等函数。并且您需要确保 employeename
以 null 结尾。
我强烈建议您使用 fgets
而不是 gets
。事实上,你可能永远不应该使用 gets
。 fgets
将处理空终止(假设缓冲区 name
不大于 employeename
)并且不会溢出您的缓冲区。
不要忘记检查 malloc
return 值。您想正确处理错误而不是在错误发生时崩溃。
使用 fgets
,进行一些错误处理和 BUFF_SIZE = 100
:
temp = (struct node *)malloc(sizeof(struct node));
if (temp == NULL)
{
printf("Malloc has failed\n");
return (-1);
}
printf("Enter the employee name: ");
fgets(name, BUFF_SIZE, stdin);
temp->employeeid = data;
strcpy(temp->employeename, name);
temp->left = temp->right = NULL;
编辑:
stdin
是标准输入。简而言之,这通常是您在终端中使用键盘输入的文本。这就是 scanf
和 gets
在不询问您的情况下使用的内容。请记住,我用这个解释偷工减料。
BUFF_SIZE
是表示常量值的便捷方式。设置它的最佳方法是在程序顶部使用这样的定义:
# define BUFF_SIZE 100
int all_your_function()
{
...
这在您需要时非常有用:
- 为特定数字起一个有意义的名称(这样您的程序更易于阅读)
- 在你的整个程序中修改这个数字(只覆盖一个地方)
我正在尝试使用 C 创建二叉搜索树。我需要做的是在节点中插入一个 id(仅数字)并将同一节点与名称(字符串)相关联。使用此 ID,我可以使用 InOrder Searching 显示树。
问题是,我得到了(感谢互联网)要插入的号码,进行 InOrder 搜索。
我没有做的是将字符串与节点相关联,即我无法存储名称。我确实在链接列表中找到了执行相同操作的答案,但我似乎不理解代码。请帮帮我。
我发现的是 memset() {我不知道那是什么}并且不知何故我应该使用 stringcpy {我知道这个,但不知道如何应用它}
我的结构代码:
struct node
{
int employeeid;
struct node *left;
struct node *right;
char employeename[100];
}*temp=NULL,*link=NULL;
在我的函数中,我尝试插入名称,但出现错误:
printf("Enter the employee name: ");
gets(name);
temp = (struct node *)malloc(sizeof(struct node));
temp->employeeid = data;
temp->employeename = name;
temp->left = temp->right = NULL;
出错的代码行:
temp->employeename = name;
错误:
error: assignment to expression with array type
我所期望的显然是 运行 的代码。请帮忙。
不能对数组使用 =
运算符。您需要使用 strcpy
、strncpy
或 memcpy
等函数。并且您需要确保 employeename
以 null 结尾。
我强烈建议您使用 fgets
而不是 gets
。事实上,你可能永远不应该使用 gets
。 fgets
将处理空终止(假设缓冲区 name
不大于 employeename
)并且不会溢出您的缓冲区。
不要忘记检查 malloc
return 值。您想正确处理错误而不是在错误发生时崩溃。
使用 fgets
,进行一些错误处理和 BUFF_SIZE = 100
:
temp = (struct node *)malloc(sizeof(struct node));
if (temp == NULL)
{
printf("Malloc has failed\n");
return (-1);
}
printf("Enter the employee name: ");
fgets(name, BUFF_SIZE, stdin);
temp->employeeid = data;
strcpy(temp->employeename, name);
temp->left = temp->right = NULL;
编辑:
stdin
是标准输入。简而言之,这通常是您在终端中使用键盘输入的文本。这就是 scanf
和 gets
在不询问您的情况下使用的内容。请记住,我用这个解释偷工减料。
BUFF_SIZE
是表示常量值的便捷方式。设置它的最佳方法是在程序顶部使用这样的定义:
# define BUFF_SIZE 100
int all_your_function()
{
...
这在您需要时非常有用:
- 为特定数字起一个有意义的名称(这样您的程序更易于阅读)
- 在你的整个程序中修改这个数字(只覆盖一个地方)