最近在做课设,想要实现一个从.txt文件读取内容,放置到存入链表的功能,查了下百度,没有一模一样可以参考的代码,遂自己动手丰衣足食,c语言新手,写法可能存在问题,请各位见谅并提出意见。
单链表定义
struct ListNode
{
char name[20];
int score;
ListNode*next;
};
typedef struct ListNode ListNode;//单链表的定义
演示用主函数
int main()
{
ListNode*h=NULL;//将指针域清空,方便在进行ReadInfo时候的各种验证
ReadInfo(h);
return 0;
}
在我的前面c语言单链表的创建,字符串搜索一文中,写了单链表的初始化以及尾插,有兴趣可以看一下,有问题请各位斧正。
文件读取
void ReadInfo(ListNode*h)
{
FILE*fp = NULL;
ListNode *head;
ListNode*p;
char name[20];
int score;//声明变量
printf("正在尝试从D:\\studentInfo.txt文件读取学生数据\n\n");
fp = fopen("D:\\studentInfo.txt","r");
if (NULL == fp)
{
printf("未能找到有效文件!请将导入文件放入D:\\studentInfo.txt\n");
return h;
}//读文件,如果不存在或者未能打开就报错
if(h==NULL)
{
head=(ListNode*)malloc(sizeof(ListNode));
h=head;
head->next=NULL;
}//如果h的指针域是空的,则表明未初始化,在这里进行初始化,并将h的地址指向head
else
{
head=h;
while(head->next!=NULL)
head=head->next;
}//如果h的指针域不是空的,通过此循环获取到尾节点,并将head的地址指向该地址
while ( fscanf(fp,"%s %d ",name,&score)!=EOF)//如果没有到文件尾,就不断的按照字符串型,整型赋值读取到name,score
{
p=(ListNode*)malloc(sizeof(ListNode));//创建新的节点p
strcpy(p->name,name);
p->score=score;//将数据传递给链表p的name和score
head->next=p;//head的下一个的指针指向p
head=p;//令head的地址指向p,进行下一次循环,使节点不断的增加
}
p->next=NULL;//令p的指针域清空
fclose(fp);//关闭文件
printf("录入成功!\n");
}
以上就是从文件内读取内容到单链表,其实和平常的从文件中读字符串是类似的,只不过可能掺杂着链表的尾插,显得有些 复杂了,仔细理解后就不算太难了。
这是我的写法,如果有大佬有更好的写法,敬请分享。