c语言 将字符读取到单链表

最近在做课设,想要实现一个从.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");
}

以上就是从文件内读取内容到单链表,其实和平常的从文件中读字符串是类似的,只不过可能掺杂着链表的尾插,显得有些 复杂了,仔细理解后就不算太难了。

这是我的写法,如果有大佬有更好的写法,敬请分享。

    原文作者:Fretory
    原文地址: https://blog.csdn.net/qq_31914873/article/details/86540039
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞