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

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

  • ChengCheng_0211 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 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?