【C】链表从文件初始化函数

节点保存的结构体是这样的:

//结构体
//用户名/管理员名与密码
typedef struct User{
char username[20];
char password[20];
struct User *next;
}usr;

以下是初始化函数

//初始化链表函数
//用户初始化(把文件中的用户名和密码导入链表)
usr *userNode(){
usr *usrhead=(usr*)malloc(sizeof(usr));
usr temp;
usr *p=usrhead;
temp.next=NULL;//防止野指针
p->next=NULL;
FILE *user=fopen("users.txt","r");
if (user==NULL){
       printf("文件打开失败!\n");
       return usrhead;
}
//循环读取文件并存到新的链表中
while(1){
if(fgets(temp.username,sizeof(temp.username),user)==NULL){
break;
}
fgets(temp.password,sizeof(temp.password),user);
removeNewLine(temp.username);removeNewLine(temp.password);
p->next=(usr*)malloc(sizeof(usr));
p=p->next;
strcpy(p->username,temp.username);
strcpy(p->password,temp.password);
p->next=NULL;
}
fclose(user);
return usrhead;
}

这是一个示例,具体代码自行修改,下面是GPT的解释

ChatGPT的解释

这段 C 代码是用于初始化链表的函数。它的作用是从一个名为 "users.txt" 的文件中读取用户名和密码,并将它们存储到链表中。

  1. usr *userNode(): 这是一个函数声明,它返回一个指向 usr 结构体的指针。
  2. usr *usrhead=(usr*)malloc(sizeof(usr));: 在内存中分配了一个 usr 结构体大小的空间,并将其地址赋给 usrhead 指针。
  3. usr temp;: 创建一个临时的 usr 结构体变量 temp,用来暂存从文件中读取的用户名和密码。
  4. usr *p=usrhead;: 创建一个指向 usr 结构体的指针 p,并将其初始化为 usrhead,它将用于遍历链表。
  5. temp.next=NULL;p->next=NULL;: 将 temppnext 字段初始化为 NULL,确保没有野指针。
  6. FILE *user=fopen("users.txt","r");: 打开名为 "users.txt" 的文件以供读取。如果文件无法打开,则输出错误信息并返回 usrhead
  7. while(1) { ... }: 这是一个无限循环,用于从文件中读取用户名和密码,并将其存储到链表中。
  8. if(fgets(temp.username,sizeof(temp.username),user)==NULL) { break; }: 使用 fgets 函数从文件中读取一行作为用户名,如果读取到文件末尾则跳出循环。
  9. fgets(temp.password,sizeof(temp.password),user);: 读取文件中的下一行作为密码。
  10. removeNewLine(temp.username); removeNewLine(temp.password);: 去除用户名和密码中的换行符。
  11. p->next=(usr*)malloc(sizeof(usr));: 分配新的 usr 结构体大小的内存,并将其地址存储在 p->next 中,创建新节点。
  12. p=p->next;: 将 p 指向下一个节点,为下一次循环准备。
  13. strcpy(p->username,temp.username); strcpy(p->password,temp.password);: 将从文件中读取的用户名和密码复制到新节点 p 中。
  14. p->next=NULL;: 将新节点的 next 指针设置为 NULL,表示这是链表中的最后一个节点。
  15. fclose(user);: 关闭文件。
  16. return usrhead;: 返回链表的头指针 usrhead,其中包含了从文件中读取的用户名和密码的链表。

这个函数的核心作用是从文件中读取用户名和密码,然后将它们按顺序存储到链表中的节点中,最后返回链表的头指针。

© 版权声明
THE END
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容