生草工坊 2022-11-15 09:26 采纳率: 100%
浏览 36
已结题

学生通讯录管理系统 代码报错

学生通讯录管理系统
建立某班学生的通讯录,要求用链表存储。
具体功能包括:
1)可以实现插入一个同学的通讯录记录;
2)能够删除某位同学的通讯录;
3)对通讯录打印输出。
设计要求:
(1)定义通讯录内容的结构体;
(2)建立存储通讯录的链表结构并初始化;
(3)建立主函数:
1)建立录入函数(返回主界面)
2)建立插入函数(返回主界面)
3)建立删除函数(返回主界面)
4)建立输出和打印函数(返回主界面)
I)通过循环对所有成员记录输出
II)输出指定姓名的某个同学的通讯录记录
5)退出

写了半天改了半天还是没看出来哪错了,求帮忙看一下

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

typedef struct stu
{
    long long nmber;
    char name[10];
    struct stu* next;
}student;

student* init()
{
    return NULL;
}
student* get_num(student* head)
{
    int flag;
    head = (student*)malloc(sizeof(student));
    student* q, * p = head;
    p->next = NULL;
    printf("请输入第一个同学的数据(姓名、手机号)\n");
    char nam[10];
    int i = 2;
    flag = scanf_s("%s", nam);
    while (1)
    {

        scanf_s("%lld", &p->nmber);
        strcpy_s(p->name, nam);
        printf("请输入第%d个同学的信息:\n", i++);
        flag = scanf_s("%s", nam);
        if (flag == 1)
        {
            q = (student*)malloc(sizeof(student));
            q->next = NULL; p->next = q; p = q;
        }
        else break;
    }
    return head;
}
student* insert(student* head, int position)
{
    int flag;
    char nam[10];
    student* p = head, * q = NULL;
    if (position < 1)
    {
        printf("输入位置有误!");
        exit(1);
    }
    q = (student*)malloc(sizeof(student));
    printf("请输入增加的学生的姓名、手机号:\n");
    flag = scanf_s("%s", nam);
    scanf_s("%lld", &q->nmber); q->next = NULL;
    if (flag == 1)
        strcpy_s(q->name, nam);
    if (position == 1)
    {
        if (!p)
        {
            printf("通讯录为空!\n");
            exit(1);
        }
        else
        {
            q->next = p; return q;
            printf("插入成功!\n");
        }
    }
    else
    {
        for (int i = 1; p; i++)
        {
            if (i + 1 == position)
            {
                q->next = p->next;
                p->next = q;
                printf("插入成功!\n");
                return head;
            }
        }
        if (!p)
        {
            printf("未找到增加的位置!\n");
            return head;
        }
    }
}
student* del(student* head, int position)
{
    student* p = head, * q = NULL;
    if (!p)
    {
        printf("删除失败,链表为空!\n");
    }
    if (position < 1)
    {
        printf("删除失败,输入的位置有误!\n");
        return head;
    }
    if (position == 1)
    {
        if (p->next)
        {
            q = p;
            head = p->next;
            free(q);
            return head;
        }
        printf("删除成功!\n");
    }
    for (int i = 1; p; i++)
    {
        if (i + 1 == position && p->next)
        {
            q = p->next;
            p->next = p->next->next;
            free(q);
            return head;
        }
        p = p->next;
        printf("删除成功!\n");
    }
    if (!p)
    {
        printf("删除失败,该位置处无元素!\n");
    }
}
void display(student* head)
{
    student* p = head;
    if (!p)
    {
        printf("链表为空!\n");
        exit(1);
    }
    else
        while (p)
        {
            printf("%-20s %-12lld\n", p->name, p->nmber);
            p = p->next;
        }
}
void main()
{
    int order, position;
    student* head = init();
    head = get_num(head);
    printf("请输入你要的操作(1.插如一个同学,2.删除某个同学的信息,3.输出同学们的信息):");
    scanf_s("%d", &order);
    if (order == 1)
    {
        printf("请输入要插入的节点位置:\n");
        scanf_s("%d", &position);
        head = insert(head, position);
    }
    if (order == 2)
    {
        printf("请输入要删除节点的值:\n");
        scanf_s("%d", &position);
        head = del(head, position);
    }
    if (order == 3)
    {
        printf("输出结果为:\n");
        display(head);
    }
}

构建时正常,输入数据后如图报错

img

本人初学者,可能会犯很多低级错误,求各位斧正

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2022-11-15 09:30
    关注

    这种错误就是scanf输入的格式不匹配
    flag = scanf_s("%s", nam);
    改为
    flag = scanf_s("%s", nam,10);
    ===========
    scanf_s使用要注意,如果输入字符串,那么在字符串变量后面一定要加上字符串最大长度值。否则会报错

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

报告相同问题?

问题事件

  • 系统已结题 11月23日
  • 已采纳回答 11月15日
  • 创建了问题 11月15日

悬赏问题

  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因