精华内容
下载资源
问答
  • 为什么输入数据后再读取链表,链表最后一个节点的数据总是会重复输出两次代码:#include#include#define LEN sizeof(struct student)struct student{char name[20];long num;float chinese;float math;float english;...

    为什么输入数据后再读取链表,链表最后一个节点的数据总是会重复输出两次代码:#include#include#define LEN sizeof(struct student)struct student{char name[20];long num;float chinese;float math;float english;struct student *next;};struct student *head;

    main(){struct student *p,*q;p=(struct student*)malloc(LEN); head=p;head->next=NULL;q=(struct student*)malloc(LEN);FILE *f1;if((f1=fopen("无.dat","wb"))==NULL){printf("文件打开失败\n");exit(1);}printf("\n\t1:新建学生成绩表\n");printf("请在下面依次输入姓名学号语文数学英语\n");scanf("%s%ld%f%f%f",&q->name,&q->num,&q->chinese,&q->math,&q->english);while(q->name!=0&&q->num!=0&&q->chinese!=0&&q->math!=0&&q->english!=0){p->next=q;p=q;q=(struct student*)malloc(LEN);printf("请在下面依次输入学号姓名语文数学英语\n");scanf("%s%ld%f%f%f",&q->name,&q->num,&q->chinese,&q->math,&q->english);fwrite(p,sizeof(struct student),1,f1)!=1;}p->next=NULL;

    if(fclose(f1)){printf("文件异常关闭");exit(1);}

    if((f1=fopen("无.dat","rb"))==NULL){printf("文件打开失败\n");exit(1);}

    p=head->next;while(!feof(f1)){fread(p,sizeof(struct student),1,f1);printf("%s %ld %f %f %f\n",p->name,p->num,p->chinese,p->math,p->english);}if(fclose(f1)){printf("文件异常关闭");exit(1);}}

    展开全文
  • } void fread_fp(struct node* head)//读取数据 { struct node* p =head; FILE* fp = NULL; fopen_s(&fp, "dong6.dat", "wb"); if (!fp) { printf("打开文件失败!\n"); return; } else { while (feof(fp) == 0) { ...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    #define _CRT_SECURE_NO_WARNINGS

    #include

    #include

    #include

    struct node* list();

    struct node* head();

    struct Node* colour_list();

    struct node* output(struct node* p);

    struct node

    {

    char contractnumber[20];//合同号

    char name[20];//产品名称

    int quantity;//数量

    struct Node* colour;//颜色

    struct node* next;

    };

    struct Node

    {

    char colour[20];//颜色

    int number;//数量

    struct Node* next;

    };

    struct node* list()//申请新节点

    {

    struct node* p = (struct node*)malloc(sizeof(struct node));

    p->next = NULL;

    return p;

    }

    struct node* head()//头节点

    {

    struct node* p = list();

    return p;

    }

    struct Node* colour_list()//申请颜色节点

    {

    struct Node* p = (struct Node*)malloc(sizeof(struct Node));

    p->next = NULL;

    return p;

    }

    void fwrite()//保存数据

    { FILE* fp = NULL;

    fopen_s(&fp, "dong6.dat", "wb+");

    if (!fp)

    {

    printf("建立文件失败!\n");

    return;

    }

    fclose(fp);

    }

    void fwrite_fp(struct node* head)//保存数据

    {

    struct node* p = head;

    FILE* fp = NULL;

    fopen_s(&fp, "dong6.dat", "ab+");

    if (!fp)

    {

    printf("打开文件失败!\n");

    return;

    }

    else

    {

    if (p == NULL)

    {

    printf("没有数据无法保存!\n");

    return;

    }

    else

    {

    while (p)

    {

    struct Node* p1 = p->colour;

    while (p1)

    {

    fwrite(p1, sizeof(p1), 1, fp);

    p1 = p1->next;

    }

    fwrite(p, sizeof(p), 1, fp);

    p = p->next;

    }

    }

    }

    fclose(fp);

    }

    void fread_fp(struct node* head)//读取数据

    {

    struct node* p =head;

    FILE* fp = NULL;

    fopen_s(&fp, "dong6.dat", "wb");

    if (!fp)

    {

    printf("打开文件失败!\n");

    return;

    }

    else

    {

    while (feof(fp) == 0)

    {

    struct node* newp = list();

    struct Node* p1 = colour_list();

    newp->colour= p1;

    while (p->next != NULL)

    {

    p = p->next;

    }

    fread(newp,sizeof(newp),1,fp);

    while (p1)

    {

    fread(p1, sizeof(p1), 1, fp);

    p1 = p1->next;

    }

    p->next = newp; } }

    fclose(fp);

    }

    void input(struct node* p)

    {

    char c = 'c';

    struct Node* p1 = colour_list();//颜色头节点

    p->colour = p1;//颜色头节点赋值

    printf("请输入合同号:\n");

    scanf_s("%s", &p->contractnumber, 20);

    printf("请输入产品名称:\n");

    scanf_s("%s", &p->name, 20);

    printf("请输入合同数量:\n");

    scanf_s("%d", &p->quantity);

    while (1)

    {

    struct Node* p2 = colour_list();//颜色申请新节点

    while (p1->next != NULL)

    {

    p1 = p1->next;

    }

    printf("请输入颜色:\n");

    scanf_s("%s", &p2->colour, 20);

    printf("请输入%s色数量:\n", p2->colour);

    scanf_s("%d", &p2->number); p1->next = p2;

    printf("是否有其他颜色?(y/n)\n");

    scanf_s(" %c", &c, 1); if (c == 'n' || c != 'y')

    {

    c = 'c';

    break;

    }

    }

    }

    struct node* output(struct node* p)//输出单个链表

    {

    struct Node* p1;

    printf("合同号:%s\t产品名称:%s\t数量:%d\n", p->contractnumber, p->name, p->quantity);

    p1 = p->colour->next;

    while (p1)

    {

    int i = 0;

    printf("%s\t%d\t", p1->colour, p1->number);

    i++;

    if (i % 2 == 0)

    {

    printf("\n");

    }

    p1 = p1->next;

    }

    printf("\n");

    return 0;

    }

    struct node* output_list(struct node* head)//输出链表

    {

    struct node* p = head->next;

    while (p)

    {

    output(p);

    p = p->next;

    }

    return 0;

    }

    struct node* colorinsert_w(struct node* head)//结尾插入

    {

    struct node* p=head; while (1)

    {

    char c = 'c';

    struct node* newp = list(); if (p->next != NULL)

    {

    while (p->next != NULL)

    {

    p = p->next;

    }

    }

    input(newp);

    p->next = newp;

    printf("是否有其他合同?(y/n)\n");

    scanf_s(" %c", &c, 1);

    if (c == 'n' || c != 'y')

    {

    c = 'c';

    break;

    }

    }

    return p;

    }int main()

    {

    struct node*p= head();

    colorinsert_w(p);

    fwrite_fp(p);

    fread_fp(p);

    output_list(p);

    return 0;

    }

    展开全文
  • 满意答案sdfsdwsw推荐于 2016.01.20采纳率:47%等级:10已帮助:1169人|#include#includestructdate{charstr[3];...//链表长度为lenstructdate*create_link(intlen){structdate*head;structdate*tmp;inti;hea...

    满意答案

    02ae427d08e371d7e90d5b995e828d6d.png

    sdfsdwsw

    推荐于 2016.01.20

    02ae427d08e371d7e90d5b995e828d6d.png

    采纳率:47%    等级:10

    已帮助:1169人

    |#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);

    }

    01分享举报

    展开全文
  • load the file", /*从文件中读入记录*/ " 7. compute the score", /*计算所有学生的总分和均分*/ " 8. insert record to list ", /*插入记录到表中*/ " 9. copy the file to new file", /*复制文件*/ " 10. sort to...

    2012-09-12 回答

    /******头文件(.h)***********/ #include "stdio.h" /*i/o函数*/ #include "stdlib.h" /*其它说明*/ #include "string.h" /*字符串函数*/ #include "conio.h" /*屏幕操作函数*/ #include "mem.h" /*内存操作函数*/ #include "ctype.h" /*字符操作函数*/ #include "alloc.h" /*动态地址分配函数*/ #define n 3 /*定义常数*/ typedef struct z1 /*定义数据结构*/ { char no[11]; char name[15]; int score[n]; float sum; float average; int order; struct z1 *next; }student; /*以下是函数原型*/ student *init(); /*初始化函数*/ student *create(); /*创建链表*/ student *delete(student *h); /*删除记录*/ void print(student *h); /* 显示所有记录*/ void search(student *h); /*查找*/ void save(student *h); /*保存*/ student *load(); /*读入记录*/ void computer(student *h); /*计算总分和均分*/ student *insert(student *h); /*插入记录*/ void append(); /*追加记录*/ void copy(); /*复制文件*/ student *sort(student *h); /*排序*/ student *index(student *h); /*索引*/ void total(student *h); /*分类合计*/ int menu_select(); /*菜单函数*/ /******主函数开始*******/ main() { int i; student *head; /*链表定义头指针*/ head=init(); /*初始化链表*/ clrscr(); /*清屏*/ for(;;) /*无限循环*/ { switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/ { /*值不同,执行的函数不同,break 不能省略*/ case 0:head=init();break; /*执行初始化*/ case 1:head=create();break; /*创建链表*/ case 2:head=delete(head);break; /*删除记录*/ case 3:print(head);break; /*显示全部记录*/ case 4:search(head);break; /*查找记录*/ case 5:save(head);break; /*保存文件*/ case 6:head=load(); break; /*读文件*/ case 7:computer(head);break; /*计算总分和均分*/ case 8:head=insert(head); break; /*插入记录*/ case 9:copy();break; /*复制文件*/ case 10:head=sort(head);break; /*排序*/ case 11:append();break; /*追加记录*/ case 12:head=index(head);break; /*索引*/ case 13:total(head);break; /*分类合计*/ case 14:exit(0); /*如菜单返回值为14程序结束*/ } } } /*菜单函数,返回值为整数*/ menu_select() { char *menu[]={"***************menu***************", /*定义菜单字符串数组*/ " 0. init list", /*初始化*/ " 1. enter list", /*输入记录*/ " 2. delete a record from list", /*从表中删除记录*/ " 3. print list ", /*显示单链表中所有记录*/ " 4. search record on name", /*按照姓名查找记录*/ " 5. save the file", /*将单链表中记录保存到文件中*/ " 6. load the file", /*从文件中读入记录*/ " 7. compute the score", /*计算所有学生的总分和均分*/ " 8. insert record to list ", /*插入记录到表中*/ " 9. copy the file to new file", /*复制文件*/ " 10. sort to make new file", /*排序*/ " 11. append record to file", /*追加记录到文件中*/ " 12. index on nomber", /*索引*/ " 13. total on nomber", /*分类合计*/ " 14. quit"}; /*退出*/ char s[3]; /*以字符形式保存选择号*/ int c,i; /*定义整形变量*/ gotoxy(1,25); /*移动光标*/ printf("press any key enter menu......\n"); /*压任一键进入主菜单*/ getch(); /*输入任一键*/ clrscr(); /*清屏幕*/ gotoxy(1,1); /*移动光标*/ textcolor(yellow); /*设置文本显示颜色为黄色*/ textbackground(blue); /*设置背景颜色为蓝色*/ gotoxy(10,2); /*移动光标*/ putch(0xc9); /*输出左上角边框┏*/ for(i=1;i<44;i++) putch(0xcd); /*输出上边框水平线*/ putch(0xbb); /*输出右上角边框 ┓*/ for(i=3;i<20;i++) { gotoxy(10,i);putch(0xba); /*输出左垂直线*/ gotoxy(54,i);putch(0xba); } /*输出右垂直线*/

    展开全文
  • c语言链表数据存入文件读取文件

    万次阅读 多人点赞 2017-05-07 15:49:24
    c语言链表数据存入文件读取文件
  • //创建文件 FILE*fp; fp = fopen("storehouse.txt","w"); fwrite(); fclose(fp); int x; int n;//初次输入的大小 Node *L; if(!(L=(Node *)malloc(sizeof(Node)))) //分配空间 { printf("\n"); exit(1)...
  • 功能:添加,删除,查找,全部输出。 添加时自动保存到文件, 查找、全部输出时从文件读取; 复制粘贴即可运行!绝对好用
  • 当前位置:我的异常网» C语言»链表透过文件读写计算两个多项式之积链表透过文件读写计算两个多项式之积www.myexceptions.net网友分享于:2014-03-24浏览:10次链表通过文件读写计算两个多项式之积写了这个程序,...
  • 本文摘自wikipedia。本文内容是关于:C语言 ... 单链表(单向链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始,如下图所示。本文将结合代码详解C语言链表,单向链表的数据...
  • C语言结合文件操作的链表实例一、 功能设计一个学生成绩管理系统,要求:录入学生成绩查询学生成绩删除学生成绩修改学生成绩二、 ADT接口/* 初始化一个链表 */void InitializeList(List * plist);/* 确定链表是否为...
  • c语言数据从链表写入到文件和从文件读取链表

    千次阅读 多人点赞 2020-03-07 14:03:28
    想要实现c语言数据从链表写入到文件和从文件读取链表这个功能必须 先得了解一些关于文件操作的一些函数 fopen() fclose() fprintf() fscanf() fread() fwrite() 这些都会再我的另外一篇博客中提到 这个代码仅仅是...
  • 写这篇博客原因: ...但是发现,文件操作这方面很少有简单易懂实用的博客。我作为大一新生,把自己学到的一点点功能分享一下。希望可以加快学者们的步伐。 进入正题: 先看效果 是不是你们想要的。 ...
  • 一 需求分析 企业员工管理系统主要是针对企业员工的基本信息进行增、删、改、查的相关操作,以便用户使用本管理系统时可以快速对企业员工的信息进行管理。 主要实现以下功能: ... ... 实现添加功能,即添加员工的...
  • c语言链表

    2021-01-13 00:20:45
    c语言暂时更新完毕 链表实现 链表改进及其函数 补充知识volatile关键字 链表实现 #include <stdio.h> #include "node.h" #include <stdlib.h> //node头文件内容: //typedef struct _node{ // ...
  • 请问C语言如何把链表存入文件,从文件读取链表Consumer*read_list(){FILE*fp;if((fp=fopen("CONSUMER.dat","rb"))==NULL){printf("无法读取CONSUMER.dat\n");returnNULL;}intsign;Consumer*s,*p,*head;head=...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼//从文件读取数据到链表int read_file_to_link(struct a *listadress,FILE *fp){if(listadress == NULL && fp == NULL){printf("链表或文件不存在!\n");return ...
  • 用两个函数 Load_LinkList() 和 Save_LinkList() 让链表文件操作结合,除了打印函数,其他都是在内存中操作链表,这样写更有条理,在创建链表时没有采用书上的用一个中间变量引导,并插入到结点前面,而是直接在链...
  • 链表的写入文件 /*====================存储彩票信息========================*/ /*功能:将彩票的全部数据写入文件 *参数:彩票数据链表 *返回值:布尔类型,读出成功返回TRUE,否则返回FALSE */ boolean ...
  • C语言 链表

    2014-12-12 08:51:00
    C语言 链表 原文:C语言 链表 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的。 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写...
  • nmea-0183协议解析C语言链表实现,读取一个GPStxt对其中的nmea协议进行解析筛选
  • 主要为大家详细介绍了C语言链表实现图书管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • //读取文件时跳过第一行的表头 while (1) { S studat; if (fscanf(fp, "%s\t%d\t%d\t%d\t%d\t%d\t%d\n", studat.name, &studat.num, &studat.age, &studat.math, &studat.english, &studat.physics, &studat....
  • }//读取文件链表 int save_consumer(Consumer *p) { FILE *fp; Consumer *head; head = p;//p为已经构建好的链表 if ((fp = fopen("CONSUMER.dat", "ab+")) == NULL) { printf("无法打开 CONSUMER....
  • C语言链表读取问题

    2012-06-03 14:49:26
    如何把文件中的链表读取出来 像 typedef struct m { int a; char b[10]; struct m *next; }M; M *p,*head,*t; 读出来之后 建立head是头的链表 文件是"D:\aaa" 存入时是 p=head; while(p !=NULL) {...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,246
精华内容 10,898
关键字:

c语言链表从文件读取

c语言 订阅