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;
    即可

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

报告相同问题?

悬赏问题

  • ¥20 为什么我写出来的绘图程序是这样的,有没有lao哥改一下
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号