C语言中如何将文件中的数据读取到链表中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中如何将文件中的数据读取到链表中相关的知识,希望对你有一定的参考价值。

现在可以实现保存到文件了,但是读取不知道怎么读取,读取的过程是txt文件里的每行数据放入一个链表结点,下一行放入另一个结点。
struct info

char num[10];
char name[20];
double score[N];
double sum;
double aver;
;

typedef struct student

struct info handle;
struct student *next;
STU,*LinkList;

我的保存函数是这样的
int SaveFile(const LinkList head)

LinkList p = head->next;
FILE *fp = NULL;

fp = fopen("student.txt","w+");
if(fp == NULL)

fclose(fp);
return ERROR;

fprintf(fp,"学号 姓名 语文 数学 外语 总分 平均分\n");
while(p)


fprintf(fp,"%s %6s %3.1f %3.1f %3.1f %3.1f
%3.1f\n",p->handle.num,p->handle.name,p->handle.score[0],p->handle.score[1],p->handle.score[2],
p->handle.sum,p->handle.aver);
p = p->next;

fclose(fp);
return OK;

参考技术A 我刚好在做项目,学生管理系统。。。。。给你一个封装好的把
void load(PNODE head)

STU stu;
FILE* fp=fopen("stu.txt","rb");
assert(fp!=NULL);
while(fread(&stu,sizeof(STU),1,fp))

add_node(head,&stu);


PNODE create_node()

PNODE pnode=(PNODE)malloc(sizeof(NODE));
assert(pnode!=NULL);
return pnode;


void init_node(PNODE pnode,PSTU pstu)

pnode->stu=*pstu;
pnode->next=NULL;


void insert_node(PNODE head,PNODE pnode)

pnode->next=head->next;
head->next=pnode;


void add_node(PNODE head,PSTU pstu)

PNODE pnode=create_node();
init_node(pnode,pstu);
insert_node(head,pnode);
参考技术B 怎么写进去的就怎么读出来,相同的格式,用fscanf把数据读出来,然后用这些数据重新生成链表就可以了追问

请问下怎么重新生成啊,我自己写了个可是读不进去数据,能帮我看下吗?

追答

跟创建链表是一样的
贴代码我看下吧

追问

太长了,不让贴,可以留个QQ吗,谢谢

追答

你留下吧我加你

追问

501984295

本回答被提问者采纳

如何将字符串从文件复制到 C 中的链表?

【中文标题】如何将字符串从文件复制到 C 中的链表?【英文标题】:how can i copy string from file to a linked list in C? 【发布时间】:2022-01-21 15:51:05 【问题描述】:

大家好,我不能将文本从文件复制到链表,整数没有问题。有我的代码。主要问题是将访问年份和城市名称复制到链接列表中,例如,我是编程新手,但我无法获得很多东西。指针对我来说似乎很难

#include <stdio.h>
#include <stdlib.h>
#define K 50
typedef struct tourists
    int year;
    char city[K];
    char country[K];
    struct tourists *next;
Element;
    typedef Element *List;

List from_file_to_list(char file_name[20])

    FILE *file1;
    int x, y;
    char city_name[K];
    List temp, head = NULL;
    
    file1 = fopen(file_name, "r");
    if(file1 == NULL)
    
        printf("Cannot do that");
        return NULL;
    
    
    while(fscanf(file1, "%d %s", &x, city_name) != EOF)
    
        temp = (List)malloc(sizeof(Element));
        temp->city[K] = city_name;
        temp->year = x;
        temp->next = head;
        head = temp;
    
    return head; 


void show_list(List head)

    List temp;
    
    temp = head;
    while(temp != NULL)
    
        printf("%s", temp->city);
        temp = temp->next;
    
    


int main()

    List head = NULL;
    head = from_file_to_list("from.txt");`
    show_list(head);

【问题讨论】:

strcpy(temp->city,city_name); 【参考方案1】:

这一行:

temp->city[K] = city_name;

实际上并不复制字符串。要在 C 中复制字符串,您必须在循环中复制其中的每个字符,或者使用 strcpy()strncpy() 之类的函数。

请记住确保字符串不超过您在目的地的可用空间量。


PS - 如果你有compiled your program with warnings turned on,你的编译器就会有told you 那一行有问题:

source>: In function 'from_file_to_list':
<source>:29:23: warning: assignment to 'char' from 'char *' makes
integer from pointer without a cast [-Wint-conversion]
   29 |         temp->city[K] = city_name;
      |  

【讨论】:

@newsenpai: 1. 下次编译时请打开警告。 2.如果有效,请采纳这个答案...

以上是关于C语言中如何将文件中的数据读取到链表中的主要内容,如果未能解决你的问题,请参考以下文章

c语言如何从文件读入,并存放在链表中

C语言问题,求解释(关于动态链表和文件写入):

c语言如何将文件数据读入链表?用fread

C语言如何将链表里的值写入文件

c# 中,如何读取XML文件,并将读取到的内容显示到TreeView中

C语言文件读取fscanf(),该怎么处理