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 Jenkins+k8s部署slave节点offline
  • ¥15 微信小游戏反编译后,出现找不到分包的情况
  • ¥15 如何实现从tello无人机上获取实时传输的视频流,然后将获取的视频通过yolov5进行检测
  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题