我必须创建一个学生数据库,其中包含他们的ID,姓名,姓氏和成绩。该信息是从如下所示的txt文件中读取的:
1
有19名学生
我必须读取文件的每一行,并根据其ID创建一个二进制搜索树。创建节点时似乎出现了问题,因为尝试搜索学生时找不到。这是我的代码:
AE797989 Spears Michael 10.00
AA566734 Walsh Brad 10.00
AE808090 Jones Dimitris 5.00
...
我没有收到任何错误消息。.谢谢您的时间!
答案 0 :(得分:1)
如果此代码未显示任何错误消息,建议您使用其他编译器。 main
中的我的扼流圈位于:
switch (ch) {
case 1:
if (insertDone)
puts("Inserton was already done");
else {
struct node* insertNode(struct node *node, char *id, char *name,
char *last_name, float grade) // ERROR HERE
{
if (node == NULL)
看起来您已经复制了函数的定义,而不仅仅是调用它。
我的问题是,您设法在一个程序中编写了许多不同的错误。程序的整体结构尚不清楚:好像您是在没有先写纸的情况下就开始编码的(是的,纸和铅笔对于初学者来说仍然是非常好的工具),每个功能应该做什么,它的输入是什么,它的输出应该是什么,以及最终要包含的数据(例如,文件名的哪个部分)。当然,我可以为您编写一个BST程序,但是您从中学不到任何东西。
所以这里有一些提示:
insertNode
:当前根节点(或第一次为NULL),id,名称,last_name和等级插入。您应该构建输入字符串的新副本(strdup
是您的朋友)。此函数将分配一个新结构,填充为字段,如果当前根为NULL,则返回该结构,或将其插入现有树中的正确位置BTW函数定义类似于
struct node *insert(struct node *root, const char id*, const char *name, const char *last_name, float grade) {
struct node * newnode = malloc(sizeof *newnode);
...
return root;
}
在任何其他函数定义之外,而函数调用将类似于:
struc node *root = NULL;
char id[100], name[100], last_name[100];
float grade;
...
if (sscanf(line,"%99s %99s %99s %f",id, name, last_name, &grade)) != 4)
{
puts("invalid file");
return;
}
root = insert(root, id, name, last_name, grade); // here is the function call