试冻 2019-05-27 23:54 采纳率: 33.3%
浏览 432

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

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

运行结果如图

图片说明

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

#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条回答 默认 最新

  • 小四的微笑 2019-05-30 18:03
    关注

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

    评论

报告相同问题?

悬赏问题

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