小小黑¥¥¥ 2021-03-15 13:05 采纳率: 100%
浏览 101
已结题

c语言中怎么插入char name后为什么输出结果会出现乱码。

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct node
{
    int id;//学号
    char name[20];
    int score;//成绩
    struct node *next;
}Lnode,*LinkList;//学生成绩的结构体
LinkList Create_List()//创建成绩单链表
{
    LinkList head=NULL;//第一个结点
    Lnode *p,*last=NULL;//last尾结点
    int id,score;
    char name[20];
    printf("请输入学号,姓名,成绩(用,隔开,0结束):\n");
    scanf("%ld,%s,%d",&id,&name,&score);
    while(id!=0)//学号为0时循环结束
    {
        p=(Lnode *)malloc(sizeof(Lnode));//新建立数据结点
        p->id=id;
        p->name[20]=name[20];
        p->score=score;
        if(head==NULL) head=p;//第一个结点的处理
        else last->next=p;//其他结点的处理
        last=p;//指向新的尾结点
        scanf("%ld,%s,%d",&id,&name,&score);
    }
    if(last!=NULL)
        last->next=NULL;//对于非空表,最后结点的指针域放空指针
    return head;
}
void Disp_List(LinkList head)//显示成绩
{
    LinkList p=head;
    //p=head->next;//读取第一个元素的地址存储位置,就是直接读取下一个位置的元素
    while(p!=NULL)
    {
        printf("学号%ld,%s,%d分→",p->id,p->name,p->score);
        p=p->next;
    }
    printf("NULL\n");
}
void Ins_List(LinkList head,int i,int id,char name[20],int score)//插入操作
{
    int j=0;
    Lnode *h,*p;
    h=(Lnode *)malloc(sizeof(Lnode));//新开辟要插入结点
    h->id=id;
    h->name[20]=name[20];
    h->score=score;
    h->next=NULL;
    p=head;
    while((j<i-1)&&(p->next!=NULL))//寻找前一个位置
    {
        p=p->next;j=j+1;
    }
    if(j==i-1){h->next=p->next;p->next=h;}
    else printf("插入失败!\n");
}
void Del_List(LinkList head,int i)//删除操作
{
    int j=0;
    LinkList p,q;
    p=head;
    while((j<i-1)&&(p->next!=NULL))
    {
        p=p->next;
        j=j+1;
    }
    if((p->next!=NULL)&&(j==i-1))
    {
        q=p->next;
        p->next=q->next;
        free(q);
    }
    else printf("删除失败!");
}
main()
{
    LinkList head;
    int id,i,score;
    char name[20];
    head=Create_List();//创建学生成绩链表
    Disp_List(head);
    printf("------------------------------\n");
    printf("输入要插入的位置,学号,成绩(用,隔开):");
        scanf("%d,%ld,%s,%d",&i,&id,&name,&score);
        Ins_List(head,i,id,name[20],score);//插入操作
        Disp_List(head);
        printf("------------------------------\n");
        printf("请输入要删除信息的位置:");
        scanf("%d",&i);
        Del_List(head,i);//删除操作
        Disp_List(head);
}

 

  • 写回答

4条回答 默认 最新

  • Tender_eu 2021-03-15 16:52
    关注

    把p->name[20]=name[20];改成strcpy(p->name, name);

    h->name[20]=name[20];改成strcpy(h->name, name);试一试

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月4日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀