dear_tl 2021-06-23 00:11 采纳率: 50%
浏览 58
已采纳

从文件到链表读不进去?C语言

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct Lnode{
    int num;
    char s[20];//姓名
    char sex[20];//性别
    int age;
    char x[20];//学历
    double mon;//工资
    char dre[20];//住址
    double tel;//电话 
    struct Lnode *next;//定义节点 
};
struct Lnode *head,*tail;

void open(FILE *fp)//把文件的内容读取到链表 
{
    struct Lnode *p=NULL;
    if((fp=fopen("worker.txt","r"))==NULL)
    {
        printf("文件打开失败!\n");
        exit(0);
    }
    else
    {
        
        while(!feof(fp))
        {
            p=(struct Lnode*)malloc(sizeof(struct Lnode));
            fscanf(fp,"%d %s %s %d %s %lf %s %lf\n",&p->num,p->s,p->sex,&p->age,p->x,&p->mon,p->dre,&p->tel);

//就是这一步有问题
            p->next=NULL;//创建节点 
            if(head==NULL)
            {
                head=p;
            }
            else{
                tail->next=p;
            }
            tail=p;
            p=p->next;
        }
    }
    fclose(fp);
}

int main(void)
{
    int a,x;
    struct Lnode *p;
    head=p=NULL;
    printf("----------欢迎进入职工信息管理系统-----------\n");
    printf("----------管理员请按1,职工请按2--------------\n");
    scanf("%d",&a);
    enter(a);
    FILE *f;
    open(f);
    if(a==2)
    printf("-------------------------------\n浏览按(1), 查询按(2),数据统计按(6),退出按(0)\n-------------------------------\n");
    if(a==1)
    printf("------------------------------------------------------------------------------\n浏览按(1), 查询按(2), 删除按(3), 修改按(4), 插入按(5), 数据统计按(6),退出按(0)\n------------------------------------------------------------------------------\n");
    scanf("%d",&x);
    while(x!=0)
    {
            switch(x)
        {
           /* case 1:see(head);break;
            case 2:find(head);break;
            case 3:Delete(head);break;
            case 4:Change(head);break;
            case 5:Add(head);break;
            case 6:Tong(head);break;*/
        }
        printf("-----------------------------------\n按0退出,按其他选择功能:\n");
        scanf("%d",&x);
    }
   // Writeout(head,f);    
 }

要求是写职工信息系统,我用的方法是事先把数据写在文本里面的。现在就是运行到open这个函数就进行不下去了,关键是我一开始调试了open函数是对的!就在我把所有代码写完运行了一次过后,就再也无法正确运行了。

单步调试就是在注释那一步出现了cannot access the memory of address.究竟是什么原因呢????希望能有大佬帮帮我!!

附上文件名 worker.txt   内容是

01 Bob 男 30 本科 6200.9 红星小欧洲 191310251
02 Lucy 女 26 本科 5102.85 彗星 18230982721
03 Jack 男 20 大专 3005.0 太升路 18334099812
04 Mumu 女 23 本科 6000.0 幸福家园 16136310223
05 Jude 男 43 高中 9998.4 思思与 13557902810
06 Luck 女 20 本科 5200.1 罗马家园 181721021
07 Fancy 男 22 本科 3010.5 中心花园 184200458
08 Lili 女 40 本科 7080.6 尊师领土 15172920304

 

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2021-06-23 04:15
    关注

    估计你还有存储文件的代码,应该是你存储后形成的文件格式与开始你自己在文本文件里写的格式不一样了,导致再次运行时,按照之前的格式读取造成了数据错乱。你仔细比较一下你写入文件的数据格式,看看新生成的文本文件与你开始定义的格式差异,应该能找到问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振