【新手提问】单链表输出首行字符串末尾出现乱码?

主要是利用单链表存储图书信息,计算图书平均价格并修改图书价格后输出。

运行结果如图

图片说明

几乎一切结果输出都很正常,就是不知道为什么第一行图书名称的末尾竟有乱码,重重复复检查运行,第一行末尾始终有乱码,却又不是整段乱码,请问这是什么问题?

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct LNode
{
    char no[20];
    char name[50];
    float price;
    struct LNode *next;
}LNode,*LinkList;

int main()
{
    int n=0;
    LNode *p,*q;
    float Average(LinkList L, int n);
    void change(LinkList L, float aver);
    LinkList L = (LinkList)malloc(sizeof(LinkList));//头结点
    L->next = NULL;//指针初始化
    q = L;
    while (1)
    {
        p = (LNode *)malloc(sizeof(LNode));//新结点
        p->next = NULL;
        scanf_s("%s %s %f", p->no, 20, p->name, 50, &p->price);
        if (p->no[0] == '0'&&p->name[0] == '0'&&p->price == 0)
            break;
        q->next = p;
        q = p;
    }
    p = L->next;
    while (p != NULL)
    {//计结点个数
        n++;
        p = p->next;
    }
    printf("%.2f\n", Average(L, n));
    change(L,Average(L, n));
    system("PAUSE");
    return 0;
}

float Average(LinkList L, int n)
{//计算平均价格
    LNode *p;
    float sum=0;
    p = L->next;
    while (p != NULL)
    {
        sum = sum + p->price;
        p = p->next;
    }
    return sum / n;
}

void change(LinkList L, float aver)
{//改变价格并输出
    LNode *p;
    p = L->next;
    while (p != NULL)
    {
        if (p->price < aver)
            p->price = (1 + 0.2)*p->price;
        else
            p->price = (1 + 0.1)*p->price;
        p = p->next;
    }
    p = L->next;
    while (p != NULL)
    {
        printf("%s %s %.2f\n", p->no, p->name, p->price);
        p = p->next;
    }
}

1个回答

你的指针LinkList L在传指针的时候无 数据信息,就一个指针,变成了野指针 导致的程序变成乱码。

CCCynti
试冻 抱歉我是新手没看懂你的意思,你是说LinkList L没有赋值吗?但是LinkList L定义时不是已经指向了头结点的空间了吗?
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问