精华内容
下载资源
问答
  • 请问C语言如何把链表存入文件,从文件读取到链表Consumer*read_list(){FILE*fp;if((fp=fopen("CONSUMER.dat","rb"))==NULL){printf("无法读取CONSUMER.dat\n");returnNULL;}intsign;Consumer*s,*p,*head;head=...

    请问C语言如何把链表存入文件,从文件读取到链表

    Consumer* read_list()

    {

    FILE *fp;

    if ((fp = fopen("CONSUMER.dat", "rb")) == NULL)

    {

    printf("无法读取 CONSUMER.dat\n");

    return NULL;

    }

    int sign;

    Consumer *s,*p,*head;

    head= (Consumer*)malloc(SIZE_C);

    if (head == NULL)

    {

    printf("读取失败!内存空间申请不足!\n");

    return NULL;

    }

    fseek(fp, 0, SEEK_END);

    if (ftell(fp) == 0)

    {

    return NULL;

    }

    p = head;

    p->next = NULL;

    while (feof(fp))

    {

    s = (Consumer*)malloc(SIZE_C);

    fread(s, SIZE_C, 1, fp);

    p->next = s;

    p = s;

    p->next = NULL;

    }

    fclose(fp);

    return head;

    }//读取文件到链表

    int save_consumer(Consumer *p)

    {

    FILE *fp;

    Consumer *head;

    head = p;//p为已经构建好的链表

    if ((fp = fopen("CONSUMER.dat", "ab+")) == NULL)

    {

    printf("无法打开 CONSUMER.dat!\n");

    return -1;

    }

    while (p != NULL)

    {

    fwrite(p, SIZE_C, 1, fp);

    p = p->next;

    }

    fclose(fp);

    return 1;

    }//储存链表到文件

    ------解决思路----------------------

    for reference only,我就只写文件到链表了,链表o大n文件用对应的fprintf就可以了

    /*************************************************************************

    > File Name: test3.c

    > Author: jukay

    > Mail: hellojukay@163.com

    > Created Time: 2014年12月18日 星期四 19时29分18秒

    ************************************************************************/

    #include

    #include

    struct date

    {

    char str[3];

    struct date *next;

    };

    //链表长度为len

    struct date *create_link(int len)

    {

    struct date *head;

    struct date *tmp;

    int i;

    head = malloc(sizeof(struct date));

    tmp = head;

    for(i = 1; i 

    {

    head ->next = malloc(sizeof(struct date));

    head = head ->next;

    }

    head ->next = NULL;

    return tmp;

    }

    //读文件到链表

    void read_file_to_link(struct date *head,FILE *fp)

    {

    if(head == NULL

    ------解决思路----------------------

    fp == NULL)

    {

    fprintf(stderr,"null pointer");

    exit(EXIT_FAILURE);

    }

    do

    {

    fscanf(fp,"%3s",head ->str);

    head = head ->next;

    }while(head != NULL);

    }

    //显示链表中的内容

    void print_link(struct date *head)

    {

    if(head == NULL)

    {

    fprintf(stderr,"null pointer");

    exit(EXIT_FAILURE);

    }

    do

    {

    printf("%s",head ->str);

    head = head ->next;

    }while(head != NULL);

    }

    int main()

    {

    FILE *fp;

    int len; //链表长度

    scanf("%d",&len);

    fp = fopen("a.txt","r");

    struct date *head;

    head = create_link(len);

    read_file_to_link(head,fp);

    print_link(head);

    exit(EXIT_SUCCESS);

    }

    ------解决思路----------------------

    Consumer* read_list()

    {

    FILE *fp;

    if ((fp = fopen("CONSUMER.dat", "rb")) == NULL)

    {

    printf("无法读取 CONSUMER.dat\n");

    return NULL;

    }

    int sign;

    Consumer *s,*p,*head;

    head= (Consumer*)malloc(SIZE_C);

    if (head == NULL)

    {

    printf("读取失败!内存空间申请不足!\n");

    return NULL;

    }

    fseek(fp, 0, SEEK_END);

    if (ftell(fp) == 0)

    {

    return NULL;

    }

    p = head;

    p->next = NULL;

    while (feof(fp))

    {

    s = (Consumer*)malloc(SIZE_C);

    //fread(s, SIZE_C, 1, fp);

    fread(s, sizeof(char), SIZE_C, fp);

    p->next = s;

    p = s;

    p->next = NULL;

    }

    fclose(fp);

    return head;

    }//读取文件到链表

    int save_consumer(Consumer *p)

    {

    FILE *fp;

    Consumer *head;

    head = p;//p为已经构建好的链表

    //if ((fp = fopen("CONSUMER.dat", "ab+")) == NULL)

    if ((fp = fopen("CONSUMER.dat", "wb")) == NULL)

    {

    printf("无法打开 CONSUMER.dat!\n");

    return -1;

    }

    while (p != NULL)

    {

    //fwrite(p, SIZE_C, 1, fp);

    fwrite(p, sizeof(char), SIZE_C, fp);

    p = p->next;

    }

    fclose(fp);

    return 1;

    }//储存链表到文件

    展开全文
  • Consumer* read_list() { FILE *fp; if ((fp = fopen("CONSUMER.dat", "rb")) == NULL) { ... printf("无法读取 CONSUMER.dat\n");...}//读取文件链表 ...//p为已经构建好的链表 ...}//储存链表文件
  • c语言链表数据存入文件和读取文件

    万次阅读 多人点赞 2017-05-07 15:49:24
    c语言链表数据存入文件和读取文件

    近快一年没有接触c语言了,今天学妹问我了链表数据存如文件和读取文件到链表怎么实现,现在搞开发很少用文件,都是用数据库,在这儿我还是写一下简单的文件读取链表的操作。在c语言中,创建单链表需要使用到malloc函数动态申请内存;文件的读写需要首先使用fopen函数打开文件,然后使用fscanf,fgetc, fgets,fprintf,fputc,fputs等函数读写函数,最后读写完毕要使用fclose函数关闭函数。


    下面的源程序展示了关于单链表如何从文件中读取数据和往文件里存入数据。

    typedef struct node {
        int data;
        struct node *next;       
    }node;
      
      
    //从文件中读取数据存入链表 
    node *createlink()
    {
        node *head =(node*)malloc(sizeof(node));
        int t;
        node *p;
        node *q;
        p=q=head;
        FILE * r= fopen("input.txt","r");
        if(r==NULL)
        {
            printf("打开文件失败!");
            return NULL; 
        }
         
        while(fscanf(r,"%d",&t)!=EOF)
        {  
           q= (node*)malloc(sizeof(node));
           q->data=t;
           p->next=q;
           p=q;
        }
        p->next=NULL;
        return head;
    }
      
     
    //输出链表到屏幕和文件output.txt 
    void outlink(node *head)
    {
       node *p=head->next;
       FILE *w =fopen("output.txt","w");
       if(w==NULL)
       {
           printf("打开文件失败!");
           return
       }
       while(p)
       {
           //输出链表节点数据到屏幕 
           printf("%d ",p->data);
           //输出链表节点数据到文件output.txt 
           fprintf(w,"%d ",p->data);
           p=p->next;        
       }     
       printf("\n");
       fprintf(w,"\n");
       fclose(w);
       return;
    }
      
    int main()
    {
        node *head;
        int n,m;
        head=createlink();
        outlink(head);
        system("pause");
        return 0;
    }

    展开全文
  • 链表头指针TEL,结构体中有name,tel,style,mail 四项,存入“telephone.txt"中。 我是这样写的 /*退出程序时将数据写回telephone.txt进行更新*/ void ReadBack() { FILE *TEL = fopen("telephone.txt","wt+")...
  • C语言链表实现通讯录并存入文件

    千次阅读 2018-08-14 19:11:18
    #include <stdio.h> #include <string.h> #include <stdlib.h> #define SIZE 100 typedef struct student STU; int len = 0; struct student { char name[10]; int num;......
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define SIZE 100
    
    typedef struct student STU;
    int len = 0;
    
    struct student
    {
        char name[10];
        int num;
        int age;
    
        struct student *next;
    };
    
    void welcome()
    {
        system("clear");
        printf("\n\n\n\n\t\t\t========================================");
        printf("\n\n\t\t\t\t\tWelcome!\n");
        sleep(1);
    }
    
    void menu()
    {
        system("clear");
        printf("\n\n\t************************************************************************");
        printf("\n\t\t\t\t\t请选择:");
        printf("\n\t\t\t\t\t1.添加信息");
        printf("\n\t\t\t\t\t2.查看信息");
        printf("\n\t\t\t\t\t3.查找信息");
        printf("\n\t\t\t\t\t4.删除信息");
        printf("\n\t\t\t\t\t5.修改信息");
        printf("\n\t\t\t\t\t6.排序");
        printf("\n\t\t\t\t\t7.退出");
        printf("\n\t************************************************************************");
    
    }
    
    /*添加信息*/
    void AddInfo(STU *first)
    {
        system("clear");
    
        printf("姓名 学号 年龄\n");
        printf("------------------------\n");
        printf("请输入信息:\n");
    
        STU *q = (STU *)malloc(sizeof(STU));
        STU *s;
        q = first;
    
        char flag = 'y';
        if(NULL == q)
        {
            printf("malloc failure!\n");
        }
    
        while(q->next != NULL)
        {
            q = q->next;
        }
    
        while(flag == 'y')
        {
            s = (STU *)malloc(sizeof(STU));
            scanf("%s", s->name);
            scanf("%d%d", &s->num, &s->age);
            s->next = NULL;
            q->next = s;
            q = s;
            len++;
            getchar();
            printf("继续添加?(y/n)");
            scanf("%c", &flag);
        }
    }
    
    
    void ShowAll(STU *first)
    {
        system("clear");
        STU *p;
        p = first->next;
    
        printf("information:\n");
        /*
           for(i = 0; i < person; i++)
           {
           for(j = 0; j < person - 1 - i; j++)
           {
           if(strcmp(s[j]->name, s[j + 1]->name) > 0)
           {
           q[0] = s[j];
           s[j] = s[j + 1];
           s[j + 1] = q[0];
           }
           }
           }
           */
        while(p->next)
        {
            printf("\e[1;35mname:%s, num:%d, age:%d\e[0m\n", p->name, p->num, p->age);
            p = p->next;
        }
        printf("\e[1;35mname:%s, num:%d, age:%d\e[0m\n", p->name, p->num, p->age);
        sleep(3);
        getchar();
    }
    
    void Sort(STU *first)
    {
        int i, j;
        STU *p;
        p = first->next;
        if(p == NULL)
        {
            printf("没有元素!\n");
        }
        for(i = 0; i < len; i++)
        {
            for(j = 0; j < len - 1 - i; j++)
            {
                if(strcmp(p->name, p->next->name) > 0)
                {
                    STU *s = p;
                    p = p->next;
                    p->next = s;
                }
            }
        }
        while(p->next)
        {
            printf("\e[1;35mname:%s, num:%d, age:%d\e[0m\n", p->name, p->num, p->age);
            p = p->next;
        }
        printf("\e[1;35mname:%s, num:%d, age:%d\e[0m\n", p->name, p->num, p->age);
        sleep(3);
    }
    
    /*查找信息*/
    void SearchInfo(STU *first)
    {
        system("clear");
        //char *name = (char *)malloc(sizeof(char));
    
        char name[10];
        int i, n = 0;
    
        printf("请输入要查找的人的名字:\n");
        //fflush(stdin);
        scanf("%s", name);
    
        STU *p = NULL;
        p = first->next;
    
        for(i = 0; i < len; i++)
        {
            if(strcmp(name, p->name) == 0)
            {
                n = 1;
                printf("该学生的信息如下:\n");
                printf("name:%s, num:%d, age:%d\n", p->name, p->num, p->age);
                sleep(3);
                break;
            }
            p = p->next;
        }
    
        if(n == 0)
        {
            printf("不存在!\n");
        }
        else
        {
            printf("查找成功!\n");
        }
        getchar();
        sleep(3);
    
    }
    
    /*删除信息*/
    void DeleteInfo(STU *first)
    {
        system("clear");
        int i, n = 0;
        char del_name[10];
        STU *p;
        p = first->next;
    
        printf("请输入要删除的人的名字:\n");
        scanf("%s", del_name);
        getchar();
    
        for(i = 0; i < len; i++)
        {
            if(strcmp(del_name, p->name) == 0)
            {
                break;
            }
            n++;
            p = p->next;
        }
    
        p = first->next;
        for(i = 0; i < n - 1; i++)
        {
            p = p->next;
        }
    
        STU *s = p->next;
        p->next = s->next;
        free(s);
        len--;
    
        if(n == 0)
        {
            printf("要删除的人不存在!\n");
        }
        else
        {
            printf("删除成功!\n");
        }
    }
    
    /*修改信息*/
    void ChangeInfo(STU *first)
    {
        system("clear");
        char *name = (char *)malloc(sizeof(char));
        char *new_name = (char *)malloc(sizeof(char));
        int new_num, new_age;
        int i, choice;
    
        printf("请输入要修改的人的名字:\n");
        scanf("%s", name);
    
        STU *p;
        p = first->next;
    
        for(i = 0; i < len; i++)
        {
            if(strcmp(name, p->name) == 0)
            {
                printf("该学生的信息如下:");
                printf("name:%s, num:%d, age:%d\n", p->name, p->num, p->age);
                printf("----------------------------\n");
                printf("请选择要修改的内容(1.name 2.num 3.age):\n");
                scanf("%d", &choice);
                switch(choice)
                {
                    case 1:
                        printf("请输入新的名字:\n");
                        scanf("%s", new_name);
                        strcpy(p->name, new_name);
                        break;
                    case 2:
                        printf("请输入新的学号:\n");
                        scanf("%d", &new_num);
                        p->num = new_num;
                        break;
                    case 3:
                        printf("请输入新的年龄:\n");
                        scanf("%d", &new_age);
                        p->age = new_age;
                        break;
                }
            }
            p = p->next;
        }
    
        printf("不存在!\n");
    
    }
    
    void writedata(STU *first)
    {
        FILE *fp = fopen("Student.txt", "w+");
        if (fp == NULL)
        {
            perror ("fopen");
            return;
        }
    
        fwrite(&len, sizeof(int), 1, fp);// 要写入个数
        STU *p = first;
        while(p->next != NULL)
        {
            p = p->next;
            int length = sizeof(STU);//写入数据的长度
            fwrite(&length, sizeof(int), 1, fp);
            fwrite(p, length, 1, fp);//写入数据
        }
    
        fclose(fp);
    }
    
    void readdata(STU *first)
    {
        FILE *fp = fopen("Student.txt", "ab+");
    
        if (fp == NULL)
        {
            perror ("fopen");
            return;
        }
    
        STU *temp = first;
    
        fread (&len, sizeof(int), 1, fp);   // 读记录的个数
        int i;
        for (i = 0; i < len; i++)
        {
            int length;
            fread (&length, sizeof(int), 1, fp);
    
            STU *p = (STU *)malloc(sizeof(STU));
            if( p == NULL )
            {
                printf("malloc error!\n");
                return ;
            }
    
            int ret = fread (p, length, 1, fp);        // 读取数据
            printf("%d\n",ret);
    
            while( temp->next != NULL )
            {
                temp = temp->next;
            }
            temp->next = p;    //找到最后一个结点,将结点p尾插进链表
            p->next = NULL;
        }
    
        fclose(fp);
    
    }
    
    int main()
    {
        STU *first = (STU *)malloc(sizeof(STU) * 10);
        first->next = NULL;
        int choice;
        welcome();
        readdata(first);
    
        while(1)
        {
            menu();
            printf("\nPlease input choice:");
            scanf("%d", &choice);
    
            switch(choice)
            {
                case 1:
                    AddInfo(first);
                    writedata(first);
                    break;
                case 2:
                    ShowAll(first);
                    break;
                case 3:
                    SearchInfo(first);
                    break;
                case 4:
                    DeleteInfo(first);
                    break;
                case 5:
                    ChangeInfo(first);
                    break;
                case 6:
                    Sort(first);
                    break;
                case 7:
                    writedata(first);
                    exit(0);
                    break;
            }
        }
    
        return 0;
    }

     

    展开全文
  • function fake_random_name($string,$key){ #伪代码 随便根据用户名和上传时间生成一个伪随机的文件名作为上传以后的用户名 #但解码的条件是可以根据文件名判断出文件所有者的用户名和上传时间 #需要从数据库取出...

    define(UPLOAD_ROOT,'你的上传文件夹路径'); function fake_random_name($string,$key){ #伪代码 随便根据用户名和上传时间生成一个伪随机的文件名作为上传以后的用户名 #但解码的条件是可以根据文件名判断出文件所有者的用户名和上传时间 #需要从数据库取出用户的密匙 才能进行解密 密匙是用户名的前5个字符 #具体加密解密的代码实现 请参照PHP标准扩展库 Mcrypt扩展下的N种方法 return $fake_random_name;}if(!is_writbale(UPLOAD_ROOT)){ die('you need chown the dir for your uploading file,make it writable~');}else{ move_uploaded_file($_FILES['POST过来的表单名']['tmp_name']; /* * 这个方法会自动调用is_upload_file()方法 检测是否是合法的http rfc1867协议上传的文件 * 当然了 你也可以限制是否是你需要的合法文件类型 $_FILE[$_POST[name]][type] 比如是否是pdf img文件 都可以 */ $dbh = new mysqli('localhost','root','sa','your_db_name');#生成中可以include进来 DSN放到根目录以外去 保护连接文件 $sec_key = substr($_SESSION['loginname'],0,5); #密匙 $file_name = fake_random_name($_FILES['POST过来的表单名']['tmp_name'],$sec_key); #加密后的名字 $q_str = "insert into tb(owner,location)values($_SEESION['loginname'],UPLOAD_ROOT.DIRECTORYSLASH.$file_name))";/SQL $dbh->query($q_str); if($dbh->num_rows()==1) echo "上传成功,已经插入数据库文件细节(加密)";}

    取消

    评论

    展开全文
  • 在编写学生管理系统时,不得不将客户录入的学生信息保存于本地,所以,这个时候就需要我们能够将链表存入的消息和文件夹的写入和读取紧密联系起来,这里我将对他逐一讲解: 打开文件 函数原型为:_CRTIMP FILE * _...
  • #include #include #includetypedef struct Node{int id;.../**按节点向文件写入数据*/void write(){FILE *f = fopen("test.txt","w");//以“w”(写)方式打开test.txtNode *temp = (Node *)malloc(...
  • 读取和保存函数是实现功能的重要函数,在每次修改前需要调用读取函数拉起链表,修改后需要调用保存函数,存入文件 0.0读取学生信息 void ReadStudent(){ FILE * fp; char k; if ((fp = fopen("D:\\demo.txt", "r...
  • C语言利用数组和文件登录注册功能

    千次阅读 2018-09-14 20:50:00
    最近有个朋友让我帮他做一个C语言的登录注册功能,考虑到他没有学到数据库于是想到了存入文件 此版本使用的数组,第二个版本使用的是链表链表是一个很好的数据结构,推荐大家用链表 第二版链接可以去我的主页...
  • 使用链表,将链表分为指针域和数据域,使用指针域动态内存分配指向数据将数据存入,之后将数据导入数据域存储数据,把数据域写为结构体以学生的id为基准表示学生的各项资料。系统实现了学生资料的存储(文件),...
  • 例如存入学生信息系统每一个成员都有很多信息分支而,在c语言中我们可以以结构体链表进行操作但java未提供我们这样的方法去将一整个单元存入文件之中,这时我们应采取的方法以算法解决这样的问题。我们在存储时可以...
  • c语言 将字符读取到单链表

    千次阅读 2019-01-18 15:26:09
    最近在做课设,想要实现一个从.txt文件读取内容,放置到存入链表的功能,查了下百度,没有一模一样可以参考的代码,遂自己动手丰衣足食,c语言新手,写法可能存在问题,请各位见谅并提出意见。 单链表定义 struct...
  • c语言学生管理系统

    2014-05-11 12:59:18
    链表实现的学生管理系统、包括文件存入读取、学生信息的录入、输出、查找、添加、删除、插入、排序、
  • 数据结构上机答案实习一:1、编写一个读入一个字符串,把它存入一个链表,并按相反的次序打印的程序。2、设有一个单位的人员工资有如下信息:name、department、 base pay、allowance、total。现从键盘输入一组人员...
  • 通过链表建立相关内容,以追加的方式写入文件中,建立读取功能,在输出信息时,现将文件中的内容读入链表中,在对链表进行输出。 管理员功能及思想: 功能: 显示信息 增加信息 修改信息 删除信息 管理员登录...
  • 链表结构的有序表表示某商场家电的库存模型。...程序功能包括:创建表、营业开始(读入文件恢复链表数据)、进货(插入)、提货(更新或删除)、查询信息、更新信息、营业结束(链表数据存入文件)等。
  • 使用链表实现的学生信息管理系统,能把数据存入txt文件,并从中读取信息
  • C语言——学籍管理系统

    千次阅读 2018-06-02 14:55:50
    登录:根据不同端的登录选择,将不同文件信息读入链表,传头结点给相应函数,进行账户名密码匹配,若匹配成功,进入各自功能端;否则,退回主菜单; 功能: 1.学生端:只允许查看本人的成绩及个人信息以及个人的...
  • 对学生信息(学号,姓名,三门功课,平均成绩)进行录入,输出,查看不及格学生,计算平均分,按学号排序,按平均分排序等功能,并存入文件中。 菜单: 1.查看全部学生成绩信息 2.查看挂科学生信息 3.按学号排序4.按...
  • 6 通讯录程序 本实例希望设计一个通讯录程序要求实现通讯录信息的录 入并具有添加查询删除显示等功能使用结构体存 储通讯录中记录信息使用链表来实现通讯录信息的添加 删除查询及显示等操作通讯录程序可实现文件读写...
  • 6 通讯录程序 本实例希望设计一个通讯录程序要求实现通讯录信息的录 入并具有添加查询删除显示等功能使用结构体存 储通讯录中记录信息使用链表来实现通讯录信息的添加 删除查询及显示等操作通讯录程序可实现文件读写...
  • 实现输入、排序、统计、打印及存入文件等功能。 先写main函数菜单,把要完成的功能添加上去 int main() { system("color F1"); int sl; char file[8]={'\0'}; char Dele[8]={'\0'}; StudentsList *L; L=...
  • C语言编写的ATM取款机

    2008-09-15 13:13:09
    d.4 每笔记录都存入到相应的记录链表中 查询功能: a) 存款记录查询 b) 取款记录查询 c) 转账记录查询 d) 需显示每笔交易时间 e) 拥有翻页查询功能 文件功能: 必须拥有一个账户信息写入文件 必须拥有一个账户存款...
  • 新增记录可以不存入文件中,以可以用原来的文件覆盖内存的内容; 可以将多个个文件记录合并到一个文件中; 2文件的存取和显示 可以单独存取文件; 可以随时显示内存中记录的全部内容; 可以直接存取默认文件...
  • 充斥着颜文字的c语言课设作业,对一根链表进行操作,使其存入文件,环境是vc6.0 #include "stdafx.h" #include<stdio.h> #include<stdlib.h> #include<windows.h> typedef struct employee ...
  • c语言唐诗300首查询

    2013-09-09 17:02:01
    1、将所有的诗词都从文件中解析出来存入结构体数组poems[320] 2、调用searchPoem(),进行查询并显示查询结果 3、countPoems():利用链表对经过排序的作者指针数组进行统计并进行输出 注意:个别标题、作者字符比较...
  • C语言文件操作、数组、函数、链表、头插法、尾插法等等 1.3 功能要求 1、学生信息录入:输入学生的姓名、年龄、编号和籍贯; 2、信息查询:(至少一种查询方式)。按编号查询学生记录,或查询同名学生的记录; 3...

空空如也

空空如也

1 2 3
收藏数 47
精华内容 18
关键字:

c语言文件存入链表

c语言 订阅