mmmenxj 2021-12-30 22:12 采纳率: 100%
浏览 434
已结题

C语言,引发的异常: 0xC0000005: 写入位置 0x00F00000 时发生访问冲突。

#引发的异常: 0xC0000005: 写入位置 0x00F00000 时发生访问冲突。
我用的是VS2019
以下是我的代码

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

typedef struct
{
    char id[10];
    char name[20];
    char score[10];
}student;

#define N 1024

void menu(int* n)
{
    printf("\t\t\t*********************************************\n");
    printf("\t\t\t\t\t1.查找学生信息\n");
    printf("\t\t\t\t\t2.按成绩进行排序\n");
    printf("\t\t\t\t\t3.合并信息表\n");
    printf("\t\t\t\t\t4.创建补考信息表\n");
    printf("\t\t\t\t\t0.退出\n");
    printf("\t\t\t*********************************************\n");
    printf("请输入操作数0-4:");
    scanf_s("%d", n);
}//创建菜单

void Printfstudent(student p[N], int len)
{
    int i;
    printf("学号\t\t姓名\t\t分数\n\n");
    for (i = 0; i < len; i++)
    {
        printf("%s\t\t", p[i].id);
        printf("%c%c%c%c%c%c%c%c%c\t\t", p[i].name[0], p[i].name[1], p[i].name[2], p[i].name[3], p[i].name[4], p[i].name[5], p[i].name[6], p[i].name[7], p[i].name[8]);
        printf("%s\t\\t\n", p[i].score);
    }
}

int visit(student p[N], int len, int i)
{
    int k = 0;
    while (p[i].score[k] != '\0')
        k++;
    return k;
}



void Sort(student p[N], int len)
{
    student st;
    int i, j, a, b;
    for (i = 0; i < len - 1; i++)
    {
        for (j = 0; j < len - 1 - i; j++)
        {
            if (strcmp(p[j].score, p[j + 1].score) < 0)
            {
                st = p[j];
                p[j] = p[j + 1];
                p[j + 1] = st;
            }
            a = visit(p, len, j);
            b = visit(p, len, j + 1);
            if (a < b)
            {
                st = p[j];
                p[j] = p[j + 1];
                p[j + 1] = st;

            }


        }
    }
    Printfstudent(p, len);
}

void serch(student p[N], int len)
{
    int i, j;
    int flat = 0;
    char num[100];
    char name1[100];
    printf("请输入1或2,1按学号查找,2按姓名查找:");
    scanf_s("%d", &i);
    if (i == 1)
    {
        printf("请输入要查找的学号:");
        scanf_s(" %s", &num);
        for (j = 0; j < len; j++)
        {
            if (strcmp(p[j].id, num) == 0)
            {
                flat++;
                break;
            }
        }
        if (flat == 0)
        {
            printf("学号出现错误!\n");
        }
        else
        {
            printf("学号: %s,姓名: %c%c%c%c%c%c%c%c%c,得分: %s\n", p[j].id, p[j].name[0], p[j].name[1], p[j].name[2], p[j].name[3], p[j].name[4], p[j].name[5], p[j].name[6], p[j].name[7], p[j].name[8], p[j].score);
        }
    }
    else if (i == 2)
    {
        flat = 0;
        printf("请输入要查找的姓名:");
        scanf_s(" %s", &name1,50);
        for (j = 0; j < len; j++)
        {
            if (strcmp(p[j].name, name1) == 0)
            {
                flat++;
                printf("学号: %s,姓名: %c%c%c%c%c%c%c%c%c,得分: %s\n", p[j].id, p[j].name[0], p[j].name[1], p[j].name[2], p[j].name[3], p[j].name[4], p[j].name[5], p[j].name[6], p[j].name[7], p[j].name[8], p[j].score);
                break;
            }
        }
        if (!flat)
        {
            printf("姓名输入有误!\n");
        }
    }
}

//文件1.txt的读入
int dos1(student p[N], int len)
{
    int i, k;
    char a[200];
    FILE* fp = fopen("1.txt", "r+");
    if (fp == NULL)
        return 1;
    fgets(a, 200, fp);
    fclose(fp);
    i = 0; len = 0; k = 0;
    while (a[i] != '#')
    {
        while (a[i] != ',')
        {
            p[len].id[k] = a[i];
            i++; k++;
        }
        i++; k = 0;
        while (a[i] != ',')
        {
            p[len].name[k] = a[i];
            i++; k++;
        }
        i++; k = 0;

        while (a[i] != '&')
        {
            p[len].score[k] = a[i];
            i++; k++;
        }
        i++; k = 0; len++;
    }

    return len;
}


//文件2.txt的读入
int dos2(student p[N], int len)
{
    int i, k;
    char b[200];
    FILE* fp = fopen("2.txt", "r+");
    if (fp == NULL)
        return 1;
    fgets(b, 200, fp);
    fclose(fp);
    i = 0; k = 0;
    while (b[i] != '#')
    {
        while (b[i] != ',')
        {
            p[len].id[k] = b[i];
            i++; k++;

        }
        i++; k = 0;
        while (b[i] != ',')
        {
            p[len].name[k] = b[i];
            i++; k++;

        }
        i++; k = 0;
        while (b[i] != '&')
        {
            p[len].score[k] = b[i];
            i++; k++;
        }
        i++; k = 0; len++;
    }
    return len;
}

//合并到文件3.txt
void dos3(student p[N], int len)
{
    FILE* fp;
    int i;
    fp = fopen("3.txt", "w+");
    for (i = 0; i < len; i++)
    {
        fprintf(fp, "%s,%c%c%c%c%c%c%c%c%c,%s &", p[i].id, p[i].name[0], p[i].name[1], p[i].name[2], p[i].name[3], p[i].name[4], p[i].name[5], p[i].name[6], p[i].name[7], p[i].name[8], p[i].score);
    }
    fclose(fp);
}

//将补考的人的名单输出到文件4.txt
void dos4(student p[N], int len)
{
    FILE* fp;
    int i = 0, a;
    char b[2] = "60";
    fp = fopen("4.txt", "w+");
    while (i < len)
    {

        a = visit(p, len, i);
        if (a == 3) i++;
        else if (strcmp(p[i].score, b) > 0)
            i++;
        else if (strcmp(p[i].score, b) < 0)
        {
            fprintf(fp, " %s,%c%c%c%c%c%c%c%c%c,%s &", p[i].id, p[i].name[0], p[i].name[1], p[i].name[2], p[i].name[3], p[i].name[4], p[i].name[5], p[i].name[6], p[i].name[7], p[i].name[8], p[i].score);
            i++;
        }
    }
    fclose(fp);
}

void main()
{
    int n, len;
    student p[N] = { 0 };
    len = dos1(p, &len);
    len = dos2(p, &len);
    while (1)
    {
        menu(&n);
        switch (n)
        {
        case 1:serch(p, len);
            break;
        case 2:Sort(p, len);
            break;
        case 3:dos3(p, len);
            printf("合并完成\n");
            break;
        case 4:dos4(p, len);
            printf("创建完成\n");
            break;
        case 0:printf("欢迎再次使用.\n");
            break;
        default:
            printf("您的输入有误,请重新输入.\n");
            break;
        }
    }
}

  • 写回答

3条回答 默认 最新

  • 书山客 2021-12-30 23:55
    关注
    
    #include <stdio.h>
    #include <string.h>
    typedef struct
    {
        char id[10];
        char name[20];
        char score[10];
    }student;
    #define N 1024
    void menu(int* n)
    {
        printf("\t\t\t*********************************************\n");
        printf("\t\t\t\t\t1.查找学生信息\n");
        printf("\t\t\t\t\t2.按成绩进行排序\n");
        printf("\t\t\t\t\t3.合并信息表\n");
        printf("\t\t\t\t\t4.创建补考信息表\n");
        printf("\t\t\t\t\t0.退出\n");
        printf("\t\t\t*********************************************\n");
        printf("请输入操作数0-4:");
        scanf_s("%d", n);
    }//创建菜单
    void Printfstudent(student p[N], int len)
    {
        int i;
        printf("学号\t\t姓名\t\t分数\n\n");
        for (i = 0; i < len; i++)
        {
            printf("%s\t\t", p[i].id);
            printf("%c%c%c%c%c%c%c%c%c\t\t", p[i].name[0], p[i].name[1], p[i].name[2], p[i].name[3], p[i].name[4], p[i].name[5], p[i].name[6], p[i].name[7], p[i].name[8]);
            printf("%s\t\\t\n", p[i].score);
        }
    }
    int visit(student p[N], int len, int i)
    {
        int k = 0;
        while (p[i].score[k] != '\0')
            k++;
        return k;
    }
    
    void Sort(student p[N], int len)
    {
        student st;
        int i, j, a, b;
        for (i = 0; i < len - 1; i++)
        {
            for (j = 0; j < len - 1 - i; j++)
            {
                if (strcmp(p[j].score, p[j + 1].score) < 0)
                {
                    st = p[j];
                    p[j] = p[j + 1];
                    p[j + 1] = st;
                }
                a = visit(p, len, j);
                b = visit(p, len, j + 1);
                if (a < b)
                {
                    st = p[j];
                    p[j] = p[j + 1];
                    p[j + 1] = st;
                }
    
            }
        }
        Printfstudent(p, len);
    }
    void serch(student p[N], int len)
    {
        int i, j;
        int flat = 0;
        char num[100];
        char name1[100];
        printf("请输入1或2,1按学号查找,2按姓名查找:");
        scanf_s("%d", &i);
        if (i == 1)
        {
            printf("请输入要查找的学号:");
            scanf_s("%s", &num);
            for (j = 0; j < len; j++)
            {
                if (strcmp(p[j].id, num) == 0)
                {
                    flat++;
                    break;
                }
            }
            if (flat == 0)
            {
                printf("学号出现错误!\n");
            }
            else
            {
                printf("学号: %s,姓名: %c%c%c%c%c%c%c%c%c,得分: %s\n", p[j].id, p[j].name[0], p[j].name[1], p[j].name[2], p[j].name[3], p[j].name[4], p[j].name[5], p[j].name[6], p[j].name[7], p[j].name[8], p[j].score);
            }
        }
        else if (i == 2)
        {
            flat = 0;
            printf("请输入要查找的姓名:");
            scanf_s(" %s", &name1, 50);
            for (j = 0; j < len; j++)
            {
                if (strcmp(p[j].name, name1) == 0)
                {
                    flat++;
                    printf("学号: %s,姓名: %c%c%c%c%c%c%c%c%c,得分: %s\n", p[j].id, p[j].name[0], p[j].name[1], p[j].name[2], p[j].name[3], p[j].name[4], p[j].name[5], p[j].name[6], p[j].name[7], p[j].name[8], p[j].score);
                    break;
                }
            }
            if (!flat)
            {
                printf("姓名输入有误!\n");
            }
        }
    }
    //文件1.txt的读入
    int dos1(student p[N], int len)
    {
        int i, k;
        char a[200];
        FILE* fp = fopen("1.txt", "r+");
        if (fp == NULL)
            return 1;
        fgets(a, 200, fp);
        fclose(fp);
        i = 0; len = 0; k = 0;
        while (a[i] != '#')
        {
            while (a[i] != ',')
            {
                p[len].id[k] = a[i];
                i++; k++;
            }
            i++; k = 0;
            while (a[i] != ',')
            {
                p[len].name[k] = a[i];
                i++; k++;
            }
            i++; k = 0;
            while (a[i] != '&')
            {
                p[len].score[k] = a[i];
                i++; k++;
            }
            i++; k = 0; len++;
        }
        return len;
    }
    
    //文件2.txt的读入
    int dos2(student p[N], int len)
    {
        int i, k;
        char b[200];
        FILE* fp = fopen("2.txt", "r+");
        if (fp == NULL)
            return 1;
        fgets(b, 200, fp);
        fclose(fp);
        i = 0; k = 0;
        while (b[i] != '#')
        {
            while (b[i] != ',')
            {
                p[len].id[k] = b[i];
                i++; k++;
            }
            i++; k = 0;
            while (b[i] != ',')
            {
                p[len].name[k] = b[i];
                i++; k++;
            }
            i++; k = 0;
            while (b[i] != '&')
            {
                p[len].score[k] = b[i];
                i++; k++;
            }
            i++; k = 0; len++;
        }
        return len;
    }
    //合并到文件3.txt
    void dos3(student p[N], int len)
    {
        FILE* fp;
        int i;
        fp = fopen("3.txt", "w+");
        for (i = 0; i < len; i++)
        {
            fprintf(fp, "%s,%c%c%c%c%c%c%c%c%c,%s &", p[i].id, p[i].name[0], p[i].name[1], p[i].name[2], p[i].name[3], p[i].name[4], p[i].name[5], p[i].name[6], p[i].name[7], p[i].name[8], p[i].score);
        }
        fclose(fp);
    }
    //将补考的人的名单输出到文件4.txt
    void dos4(student p[N], int len)
    {
        FILE* fp;
        int i = 0, a;
        char b[3] = "60";
        fp = fopen("4.txt", "w+");
        while (i < len)
        {
            a = visit(p, len, i);
            if (a == 3) i++;
            else if (strcmp(p[i].score, b) > 0)
                i++;
            else if (strcmp(p[i].score, b) < 0)
            {
                fprintf(fp, " %s,%c%c%c%c%c%c%c%c%c,%s &", p[i].id, p[i].name[0], p[i].name[1], p[i].name[2], p[i].name[3], p[i].name[4], p[i].name[5], p[i].name[6], p[i].name[7], p[i].name[8], p[i].score);
                i++;
            }
        }
        fclose(fp);
    }
    void main()
    {
        int n, len=0;
        student p[N] = { 0 };
        len = dos1(p, len);
        len = dos2(p, len);
        while (1)
        {
            menu(&n);
            switch (n)
            {
            case 1:serch(p, len);
                break;
            case 2:Sort(p, len);
                break;
            case 3:dos3(p, len);
                printf("合并完成\n");
                break;
            case 4:dos4(p, len);
                printf("创建完成\n");
                break;
            case 0:printf("欢迎再次使用.\n");
                break;
            default:
                printf("您的输入有误,请重新输入.\n");
                break;
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月11日
  • 已采纳回答 1月3日
  • 创建了问题 12月30日

悬赏问题

  • ¥15 2024-五一综合模拟赛
  • ¥15 如何将下列的“无限压缩存储器”设计出来
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口