Celia_D 2019-10-13 13:43 采纳率: 50%
浏览 1195
已采纳

C语言:单链表输出显示问题

各位大佬麻烦帮忙看一下,从txt文件中获取数据为链表后,想要输出显示,运行结果是-842150451 1 3 5 7 9(1 3 5 7 9为正确链表数据)
代码如下:

// 实验2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef struct LinkList
{
    int data;
    struct LinkList *next;
}LinkList;

LinkList *createlink()
{
    LinkList *head=(LinkList*)malloc(sizeof(LinkList));
    int t;
    LinkList *p;
    LinkList *q;
    p=q=head;
    FILE *r=fopen("list1.txt","r");
    if(r==NULL)
    {
        printf("could not open file");
        return NULL;
    }
    while(fscanf(r,"%d",&t)!=EOF)
    {
        q=(LinkList*)malloc(sizeof(LinkList));
        q->data=t;
        p->next=q;
        p=q;
    }
    p->next=NULL;
    return head;
}

int _tmain(int argc, _TCHAR* argv[])
{
    LinkList *p;
    p=createlink();
    while(p)
    {
    printf("%d ",p->data);
    p=p->next;
    }
    //system("pause");
    return 0;
}


  • 写回答

1条回答 默认 最新

  • threenewbee 2019-10-13 15:20
    关注

    while(fscanf(r,"%d",&t)!=EOF)
    {
    q=(LinkList*)malloc(sizeof(LinkList));
    q->data=t;
    p->next=q;
    p=q;
    }
    这里,你从文件读入的数据,都是新建一个节点,然后放在data域里面的,而作为表头的那个节点,没有用到,所以是随机值

    所以你程序没毛病,只是输出的时候,
    while(p)
    前面加上
    p = p->next;
    即可

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

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料