九穗禾 2019-03-02 23:58 采纳率: 60%
浏览 2726
已采纳

从txt文件中读取数据存入到链表,即使文件没有内容也会存上数字和乱码

代码如下:

contacts* read(char* filename)//把文件读入链表
{
    FILE* fp;
    if ((fp = fopen("people.txt","r")) == NULL)//以可读写方式打开文件,如果没有则建立一个
        {
            printf ("文件打开失败!\n");
            exit (1);
        }
    contacts *head, *q, *p, *h;
    head = NULL;
    p = (contacts*)malloc(sizeof(contacts));
    if(NULL == p)
    {
        printf("内存分配错误");
        exit(1);
    }
    q = p; //开始时,p和q均指向第1个结点
    while (!feof(fp))//创建链表, 并把文件内容输入
    {
        n++;
        if (n == 1)
        {
            head = p;
        }
        else
        {
            q->next = p;
        }

        q = p;//q是最后一个结点
        p = (contacts*)malloc(sizeof(contacts));
        fscanf(fp,"%d %s %s",&p->no,&p->name,&p->sex);
        /*int i=0;
        for(i=0;i<8;i++)
        {
            fscanf(fp,"%s",&p->phonenumber[i]);
        }
        fscanf(fp,"%s %d %d %d",&p->address,&p->byear,&p->bmonth,&p->bday);*/
    };
    q->next = NULL;//输入完毕后,q->next为NULL
    h = head;
    fclose(fp);
    return h;
}

void browse(contacts* head)//显示程序中所有记录的信息。
{
    while(head)//当head不为空的时候
    {
        printf("\n==================================\
                  \n序号:%d\
                  \n姓名:%s             性别:%s",head->no,head->name,head->sex);
        /*printf("\n电话号码:\n");
        int i;
        for(i=0; i<8; i++)
        {
            if(strlen(head->phonenumber[i]) == 0)
            {
                continue;
            }
            else
            {
                printf("%s\n",head->phonenumber[i]);
            }
        }
        printf("住址:%s               ",head->address);
        printf("生日:%d年%d月%d日",head->byear,head->bmonth,head->bday);*/
        printf("\n==================================\n");
        head = head->next;
    }
}

运行结果
图片说明

为啥会这样。

  • 写回答

1条回答 默认 最新

  • woshixushuai 2019-03-03 00:02
    关注

    使用malloc为指针分配内存后,建议使用memset函数为该内存区域数据初始化。如果没有这一步操作,就会读出该区域以前使用时留下的垃圾数据。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器