#引发的异常: 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;
}
}
}