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

从文件到链表读不进去?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 无用
    打赏 举报
  • 这个语句与数据类型不匹配,

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

    要对着结构体的类型设置,字符型%c

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题