石头20030118 2023-09-28 14:42 采纳率: 50%
浏览 9

vs运行之后在程序里面输入完之后报错,如何解决?

vs运行之后在程序里面输入完之后报错,想知道哪里错了

#define CRT SECURE NO WARNINGS
#include"stdio.h";
#include"stdlib.h";
#include"string.h"
#define LIST_INIT_SIZE 50
#define MaxSize 50
#define Increment 10
typedef int BOOL;
typedef struct {
    char ID[5];
    char name[10];
    char gender[5];
    char dept[10];
    char post[8];
    float basicSalary;
}Employee;
typedef Employee ElemType;
#define True 1
#define False 0
typedef struct {
    ElemType* elem;
    int length;
    int listsize;
}SqList, * PSqList;
BOOL ListEmpty(SqList L)
{
    if (L.length == 0)
        return True;
    return False;
}
void DestroyList(SqList* L)
{
    free(L->elem);
    L->elem = NULL;
    L->length = 0;
}
SqList InitList()
{
    SqList L;
    L.elem = (ElemType*)malloc(MaxSize * sizeof(ElemType));
    if (!L.elem)
        exit(-1);
    L.length = 0;
    L.listsize = MaxSize;
    return L;
}
void PrintList(SqList L)
{
    int i;
    if (L.length == 0)
    {
        printf("空表\n");
        return;
    }
    printf("员工顺序表中员工为:\n");
    printf("工号\t 姓名\t 性别\t 部门\t 职务\t 基本工资\n");
    for (i = 0; i < L.length; i++)
    {
        printf("%s\t %s\t %s\t %s\t %s\t %.2f\n", L.elem[i].ID, L.elem[i].name, L.elem[i].gender, L.elem[i].dept, L.elem[i].post, L.elem[i].basicSalary);
    }
    printf("\n");
}
SqList CreateList(int n)
{
    int i;
    SqList pL;
    pL = InitList();
    printf("请输入顺序表:\n");
    for (i = 0; i < n; i++)
    {
        printf("请输入第%d个员工的工号、姓名、性别、部门、职务、基本工资\n", i + 1);
        scanf_s("%d", &pL.elem[i].ID);

        scanf_s("%d", &pL.elem[i].name);

        scanf_s("%d", &pL.elem[i].gender);
        scanf_s("%d", &pL.elem[i].dept);
    
        scanf_s("%d", &pL.elem[i].post);
        
        scanf_s("%f", &pL.elem[i].basicSalary);
    }
    pL.length = n;
    return pL;
}
BOOL InsertList(SqList* L, int i, ElemType e)
{
    ElemType* newbase, * p, * q;
    int j;
    if (i<1 || i>L->length + 1)
    {
        printf("插入位置不合理。\n");
        return False;
    }
    if (L->length >= L->listsize)
    {
        newbase = (ElemType*)realloc(L->elem, (L->listsize + Increment) * sizeof(ElemType));
        if (!newbase) exit(-1);
        L->elem = newbase;
        L->listsize += Increment;
    }
    for (j = L->length - 1; j >= i - 1; j--)
    {
        L->elem[j + 1] = L->elem[j];
    }
    L->elem[i - 1] = e;
    L->length++;
    return True;
}
BOOL ListDelete(SqList* L, int i, ElemType* e)
{
    int j;
    if (i<1 || i>L->length)
    {
        printf("删除位置不合理!\n");
        return False;
    }
    *e = L->elem[i - 1];
    for (j = i; j <= L->length - 1; j++)
    {
        L->elem[j - 1] = L->elem[j];
    }
    L->length--;
    return True;
}
int LocateElem(SqList L, ElemType e)
{
    int i;
    for (i = 0; i <= L.length - 1; i++)
    {
        if (strcmp(L.elem[i].ID, e.ID) == 0)
            return i + 1;
    }
    return 0;
}
BOOL GetElem(SqList L, int i, ElemType* e)
{
    if (i<1 || i>L.length)
    {
        printf("查找位置错误,无法查询到结果!\n");
        return False;
    }
    *e = L.elem[i - 1];
    return True;
}
int ListLength(SqList L)
{
    return L.length;
}
void Combine(SqList La, SqList Lb, PSqList Lc)
{
    ElemType* pa, * pa_last, * pb, * pb_last, * pc;
    pa = La.elem; pb = Lb.elem;
    pa_last = La.elem + La.length - 1;
    pb_last = &Lb.elem[Lb.length - 1];
    Lc->listsize = Lc->length = La.length + Lb.length;
    pc = Lc->elem = (ElemType*)malloc(Lc->listsize * sizeof(ElemType));
    while (pa <= pa_last && pb <= pb_last)
    {
        if (strcmp(pa->ID, pb->ID) < 0)
            *pc++ = *pa++;
        else
            *pc++ = *pb++;
    }
    while (pa <= pa_last)
        *pc++ = *pa++;
    while (pb <= pb_last)
        *pc++ = *pb++;
}
void main()
{
    SqList L, La, Lb, Lc;
    int i = 0, choice = 0, n;
    ElemType e;
    do {
        printf("**************顺序表操作**************\n");
        printf("**************1-----建表**************\n");
        printf("**************2-----判空**************\n");
        printf("**************3-----求表长************\n");
        printf("**************4-----按位置查找********\n");
        printf("**************5-----按数值查找********\n");
        printf("**************6-----插入**************\n");
        printf("**************7-----删除**************\n");
        printf("**************0-----退出**************\n");
        printf("请输入想要进行的操作(0-7):\n");
        scanf_s("%d", &choice);
        switch (choice)
        {
        case 1:
            printf("请输入元素个数\n");
            scanf_s("%d", &n);
            if (n > 0)
            {
                L = CreateList(n);
                PrintList(L);
            }
            else
                printf("输入数值不正确!\n");
            break;
        case 2:
            if (ListEmpty(L))
                printf("空表!\n");
            else
                printf("顺序表不空!\n");
            break;
        case 3:
            printf("顺序表长度为%d\n", ListLength(L));
            break;
        case 4:
            printf("请输入要查询元素的位置\n");
            scanf_s("%d", &i);
            if (GetElem(L, i, &e))
            {
                printf(" %s\t %s\t %s\t %s\t %s\t %.2f\n", e.ID, e.name, e.gender, e.dept, e.post, e.basicSalary);
            }
            break;
        case 5:
            printf("请输入查找员工的工号\n");
            scanf_s("%d", &e.ID);
            if (LocateElem(L, e))
                printf("工号%S的位置为%d\n", e.ID, LocateElem(L, e));
            else
                printf("工号%s不在顺序表中!\n", e.ID);
            break;
        case 6:
            printf("请插入员工的工号、姓名、性别、部门、职务、基本工资\n");
            scanf_s("%d", &e.ID);
            scanf_s("%d", &e.name);
            scanf_s("%d", &e.gender);
            scanf_s("%d", &e.dept);
            scanf_s("%d", &e.post);
            scanf_s("%f", &e.basicSalary);
            printf("要输入的位置为:\n");
            scanf_s("%d", &i);
            if (InsertList(&L, i, e))
            {
                printf("插入成功!\n");
                PrintList(L);
            }
            break;
        case 7:
            printf("要删除的位置为:\n");
            scanf_s(" %d", &i);
            if (ListDelete(&L, i, &e))
            {
                printf("第%d个元素删除成功!\n", i);
                printf("删除员工工号为%s", e.ID);
                PrintList(L);
            }
            break;
        case 0:
            printf("退出!\n");
            break;
        default:printf("输入的选项不正确,应为(0-7),请重试!\n");
            break;
        }
    } while (choice);
    system("pause");
}

  • 写回答

3条回答 默认 最新

  • yun6853992 2023-09-28 15:32
    关注

    应该是你scanf输入的时候 定义的输出是%d 注意这里

    img

    评论

报告相同问题?

问题事件

  • 创建了问题 9月28日

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题