大一C语言求助,求大神帮忙看看修改,代码编译没错运行中断,单步编译显示错误Unhandled exception in Cpp1.exe: 0xC0000005: Access Violation

本人计算机专业大一,写了一个C语言大作业代码,题目要求如图
图片说明
编译没有问题,是errors 0 warnings 0
图片说明
但是每次运行都会在第一次调用函数后中断,退出运行窗口。
单步调试在中断时弹出一个弹窗,如下图:
图片说明
这个真的超出我大脑营业范围了,希望各位大神帮着改一改,感谢感谢,deadline就在这几天,救我一命吧!!!!!!
(为了方便查看我写了菜单,错误在part 6开头,“新增确诊数据”那个,被调函数是part 9第一个)
再次感谢大神!!!


//————数据处理部分代码内容菜单————//
//part 1:头文件及宏定义//
//part 2:定义链表结构//
//part 3:函数声明//
//part 4:定义数据//
//part 5:由文件获取昨日累计//
//part 6:数据处理//
//part 7:链表调用//
//part 8:创建文件储存累计数据//
//part 9:被调函数——求值部分//
//part 10:被调函数——链表部分//




//——————————————part 1:头文件及宏定义————————————//

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<locale.h>
#include<wchar.h>
#define D 34
#define I 222



//——————————————part 2:定义链表结构——————————————//

struct node_domestic                             //我国//
{
 int did_d[D];      //省今日新增确诊//
int dia_d[D];      //省累计确诊人数//
int dis_d[D];      //省确诊总数排序//
int cud_d[D];      //省今日新增治愈//
 int cua_d[D];      //省累计治愈人数//
int cus_d[D];      //省治愈总数排序//
 int ded_d[D];      //省今日新增死亡//
int dea_d[D];      //省累计死亡人数//
int des_d[D];      //省死亡总数排序//
int drs_d[D];      //省病死率排序//
double dr_d[D];       //省病死率//
struct node_domestic *next;
};
typedef struct node_domestic DO;


struct node_international                         //世界//
{
int did_i[I];      //国今日新增确诊//
int dia_i[I];      //国累计确诊人数//
int dis_i[I];      //国确诊总数排序//
int cud_i[I];      //国今日新增治愈//
int cua_i[I];      //国累计治愈人数//
int cus_i[I];      //国治愈总数排序//
int ded_i[I];      //国今日新增死亡//
int dea_i[I];      //国累计死亡人数//
int des_i[I];      //国死亡总数排序//
int drs_i[I];      //国病死率排序//
double dr_i[I];      //国病死率//
struct node_international *next;
};
typedef struct node_international IN;




//————————————————part 3:函数声明——————————————//


int assign_d();                   //省新增数据录入函数//
int assign_i();                            //国新增数据录入函数//
int accumulated_d(int[],int[]);      //省累计人数计算并输出//
int accumulated_i(int[],int[]);      //国累计人数计算并输出//
int sort_d(double[]);        //省排序输出并序号//
int sort_i(double[]);       //国排序输出并序号//
double rate_d(int[],int[]);       //省病死率//
double rate_i(int[],int[]);       //国病死率//



DO *creat(DO *head0);    //建立链表(我国)的声明//
IN *creat(IN *head1);    //建立链表(世界)的声明//




//————————————————part 4:定义数据——————————————//

int main()
{
   int i,n,t;


    int did_d[D];      //省今日新增确诊//
    int did_i[I];      //国今日新增确诊//
    int dis_d[D];      //省确诊总数排序//
    int dis_i[I];      //国确诊总数排序//
    int cud_d[D];      //省今日新增治愈//
    int cud_i[I];      //省今日新增治愈//
    int cus_d[D];      //省治愈总数排序//
    int cus_i[I];      //国治愈总数排序//
    int ded_d[D];      //省今日新增死亡//
    int ded_i[I];      //国今日新增死亡//
    int des_d[D];      //省死亡总数排序//
    int des_i[I];      //国死亡总数排序//
    int drs_d[D];      //省病死率排序//
    int drs_i[I];      //国病死率排序//
double dr_d[D];       //省病死率//
double dr_i[I];       //国病死率//


    int dia_d[D]={0};      //省累计确诊人数//
    int dia_i[I]={0};      //国累计确诊人数//
    int cua_d[D]={0};      //省累计治愈人数//
    int cua_i[I]={0};      //国累计治愈人数//
int dea_d[D]={0};      //省累计死亡人数//
    int dea_i[I]={0};      //国累计死亡人数//

//排除特殊情况:第一次录入数据——直接赋值昨日累计为0//


printf("欢迎进入数据录入系统!  \n");
printf("首次录入请输入 0 ,非首次录入请输入 1 :  \n");
scanf("%d",&n);


//————————————part 5:由文件获取昨日累计—————————————//

if(n!=0)
{

//省//
FILE *fp0;
if((fp0=fopen("D:\\do_past.txt","r"))==NULL)     //以只读形式创建//
{
exit(0);
}                         
for(i=0;i<D;i++)
fscanf(fp0,"%d %d %d",dia_d[i],cua_d[i],dea_d[i]);
fclose(fp0);

//国//
FILE *fp1;
if((fp1=fopen("D:\\in_past.txt","r"))==NULL)     //以只读形式创建//
{
exit(0);
}                          //特殊情况:第一次录入数据//
for(i=0;i<I;i++)
fscanf(fp1,"%d %d %d",dia_i[i],cua_i[i],dea_i[i]);
fclose(fp1);  

}                   

printf("请准备开始输入今日数据!  \n");





//——————————————part 6:数据处理————————————————//


printf("即将开始录入我国疫情相关数据! \n");

                                                 //调用省新增数据录入函数//
printf("请录入各省新增确诊数据: \n");
did_d[i]=assign_d();
printf("请录入各省新增治愈数据: \n");
cud_d[i]=assign_d(); 
printf("请录入各省新增死亡数据: \n");
ded_d[i]=assign_d(); 

printf("我国新增数据已全部录入完成! \n");



                                                    //调用省累计函数//      
dia_d[i]=accumulated_d(did_d,dia_d);
printf("已生成累计确诊数据!\n");
cua_d[i]=accumulated_d(cud_d,cua_d);
printf("已生成累计治愈数据!\n");
dea_d[i]=accumulated_d(ded_d,dea_d); 
printf("已生成累计死亡数据!\n");



printf("我国累计数据已全部生成!  \n");



dr_d[i]=rate_d(dia_d,dea_d);       //调用省病死率函数//
printf("我国病死率数据已全部生成!  \n");




                          //调用省排序函数//

dis_d[i]= sort_d((double*)dia_d);
printf("已生成确诊排序!\n");
cus_d[i]= sort_d((double*)cua_d); 
printf("已生成治愈排序!\n");
des_d[i]= sort_d((double*)dea_d);
printf("已生成死亡排序!\n");
drs_d[i]= sort_d(dr_d);
printf("已生成死亡率排序!\n");
                     //实参类型强制转换,实现int、 double两种实参共用一个函数//



printf("我国排序数据已全部生成!  \n");

printf("今日我国全部疫情相关数据均已生成!  \n");




printf("即将开始录入世界疫情相关数据! \n");

                                                 //调用国新增数据录入函数//
printf("请录入各国新增确诊数据: \n");
did_i[i]=assign_i();
printf("请录入各国新增治愈数据: \n");
cud_i[i]=assign_i(); 
printf("请录入各国新增死亡数据: \n");
ded_i[i]=assign_i(); 

printf("世界新增数据已全部录入完成! \n");



                                                    //调用国累计函数//      
dia_i[i]=accumulated_i(did_i,dia_i);
printf("已生成累计确诊数据!\n");
cua_i[i]=accumulated_i(cud_i,cua_i);
printf("已生成累计治愈数据!\n");
dea_i[i]=accumulated_i(ded_i,dea_i); 
printf("已生成累计死亡数据!\n");



printf("世界累计数据已全部生成!  \n");



dr_i[i]=rate_i(dia_i,dea_i);       //调用国病死率函数//
printf("世界病死率数据已全部生成!  \n");




                          //调用国排序函数//

dis_i[i]= sort_i((double*)dia_i);
printf("已生成确诊排序!\n");
cus_i[i]= sort_i((double*)cua_i); 
printf("已生成治愈排序!\n");
des_i[i]= sort_i((double*)dea_i);
printf("已生成死亡排序!\n");
drs_i[i]= sort_i(dr_i);
printf("已生成死亡率排序!\n");
                     //实参类型强制转换,实现int、 double两种实参共用一个函数//




printf("世界排序数据已全部生成!  \n");

printf("今日世界全部疫情相关数据均已生成!  \n");




//———————————————part 7:链表调用——————————————//

printf("正在储存今日我国各省全部疫情相关数据!  \n");

DO *head0;
head0=NULL;
head0=creat(head0);        //调用我国链表//


printf("正在储存今日世界各国全部疫情相关数据!  \n");

IN *head1;
head1=NULL;
head1=creat(head1);        //调用世界链表//



//—————————————part 8:创建文件储存累计数据——————————//

printf("正在进行最后整理,请您稍候片刻!  \n");


//省累计数据文件//
    FILE *fp0;
    FILE *fp1;

    if((fp0=fopen("D:\\do_past.txt","w"))==NULL)   //用只写方式打开文件,若文件不存在则创建一个文件便于次日调取//
    {
        printf("Can not open the file!\n");
        exit(0);
    }
    for(t=0;t<D;t++);
    fprintf(fp0," %d %d %d\n",dia_d[t],cua_d[t],dea_d[t]);    //分行输入各个省份对应的累计确诊、治愈、死亡//
    fclose(fp0);


//国累计数据文件//
    if((fp1=fopen("D:\\in_past.txt","w"))==NULL)   //用只写方式打开文件,若文件不存在则创建一个文件便于次日调取//
    {
        printf("Can not open the file!\n");
        exit(0);
    }
    for(t=0;t<I;t++);
    fprintf(fp1," %d %d %d\n",dia_i[t],cua_i[t],dea_i[t]);    //分行输入各个国家对应的累计确诊、治愈、死亡//
    fclose(fp1);

printf("今日所有疫情数据相关操作已完成,感谢您的配合,再见!  \n");

return 0;
}



//———————————part 9:被调函数——求值部分————————————//


int assign_d()                   //省新增数据录入函数//
{  
int i;
int m[D];
for(i=0;i<D;i++)
{
printf("省份编号:%d \n",i+1);
scanf("%d",m);
}
printf("完成! \n");
return *m;
}


int assign_i()                            //国新增数据录入函数//

{  
int i;
int m[I];
for(i=0;i<I;i++)
{
printf("国家编号:%d \n",i+1);
scanf("%d",m);
}
printf("完成! \n");
return *m;
}


int accumulated_d(int *x,int *s)      //省累计人数计算并输出//
{
    int i;
            for(i=0;i<D;i++)
{    scanf("%d",x);    //今日新增人数//
    s[i]=s[i]+x[i];
}
return *s;
}




int accumulated_i(int *x,int *s)      //国累计人数计算并输出//
{
    int i;
for(i=0;i<I;i++)
{
scanf("%d",&x);       //今日新增人数//
    s[i]=s[i]+x[i];
}
return *s;
}



int sort_d(double *a)        //省排序输出并序号//
{
    int i,j,temp;
    int  b[D];
    for(i=0;i<D;i++)
        b[i]=i+1;
    for(i=1;i<D;i++)
        for(j=0;j<i;j++)
          if(a[i]>a[j])
          {
             temp=b[i];
             b[i]=b[j];
             b[j]=temp;
         }
return *b;
}



int sort_i(double *a)        //国排序输出并序号//
{
    int i,j,temp;
    int  b[I];
    for(i=0;i<I;i++)
        b[i]=i+1;
    for(i=1;i<I;i++)
        for(j=0;j<i;j++)
            if(a[i]>a[j])
            {
                temp=b[i];
                b[i]=b[j];
                b[j]=temp;
                }
return *b;
}






double rate_d(int *dia_d,int *dea_d)       //省病死率//
{
    int a;
  double dr_d[D];
for(a=0;a<D;a++)
  dr_d[a]=dia_d[a]/dea_d[a];
return *dr_d;
}


double rate_i(int *dia_i,int *dea_i)       //国病死率//
{
    int a;
  double dr_i[I];
for(a=0;a<I;a++)
  dr_i[a]=dia_i[a]/dea_i[a];
return *dr_i;
}




//————————————part 10:被调函数——链表部分———————————//

DO *creat(DO *head0)    //创建链表(我国),并返回头指针//
{
int did_d[D];      //省今日新增确诊//
int dia_d[D];      //省累计确诊人数//
int dis_d[D];      //省确诊总数排序//
int cud_d[D];      //省今日新增治愈//
int cua_d[D];      //省累计治愈人数//
int cus_d[D];      //省治愈总数排序//
int ded_d[D];      //省今日新增死亡//
int dea_d[D];      //省累计死亡人数//
int des_d[D];      //省死亡总数排序//
double dr_d[D];       //省病死率//
int drs_d[D];      //省病死率排序//

    DO *s;              //每次指向结点的指针//
    DO *r;            //指向结点的前面一个结点的指针//
    int i;
    head0=(DO*)malloc(sizeof(DO));
    r=head0;

    for(i=0;i<D;i++)
    {   
        s=(DO*)malloc(sizeof(DO));     //申请一个新结点//
s->did_d[i]=did_d[i];      //省今日新增确诊//
s->dia_d[i]=dia_d[i];      //省累计确诊人数//
s->dis_d[i]=dis_d[i];      //省确诊总数排序//
s->cud_d[i]=cud_d[i];      //省今日新增治愈//
s->cua_d[i]=cua_d[i];      //省累计治愈人数//
s->cus_d[i]=cus_d[i];      //省治愈总数排序//
s->ded_d[i]=ded_d[i];      //省今日新增死亡//
s->dea_d[i]=dea_d[i];      //省累计死亡人数//
s->des_d[i]=des_d[i];      //省死亡总数排序//
s->dr_d[i]=dr_d[i];       //省病死率//
s->drs_d[i]=drs_d[i];      //省病死率排序//
       //将数据存放到新结点中//
        r->next=s;   
        r=s;      //将新结点插入链表//
    }
    r->next='\0';        //置链表结束标志//

printf("我国数据储存完成!  \n");

    return head0;         // 返回表头指针//
}








IN *creat(IN *head1)                //创建链表(世界),并返回头指针//
{
 int did_i[I];      //国今日新增确诊//
int dia_i[I];      //国累计确诊人数//
int dis_i[I];      //国确诊总数排序//
int cud_i[I];      //国今日新增治愈//
 int cua_i[I];      //国累计治愈人数//
int cus_i[I];      //国治愈总数排序//
 int ded_i[I];      //国今日新增死亡//
int dea_i[I];      //国累计死亡人数//
int des_i[I];      //国死亡总数排序//
double dr_i[I];       //国病死率//
int drs_i[I];      //国病死率排序//

    IN *s;              //每次指向结点的指针//
    IN *r;            //指向结点的前面一个结点的指针//
    int i;
    head1=(IN*)malloc(sizeof(IN));
    r=head1;


    for(i=0;i<I;i++)
    {   
        s=(IN*)malloc(sizeof(IN));     //申请一个新结点//
s->did_i[i]=did_i[i];      //国今日新增确诊//
s->dia_i[i]=dia_i[i];      //国累计确诊人数//
s->dis_i[i]=dis_i[i];      //国确诊总数排序//
s->cud_i[i]=cud_i[i];      //国今日新增治愈//
s->cua_i[i]=cua_i[i];      //国累计治愈人数//
s->cus_i[i]=cus_i[i];      //国治愈总数排序//
s->ded_i[i]=ded_i[i];      //国今日新增死亡//
s->dea_i[i]=dea_i[i];      //国累计死亡人数//
s->des_i[i]=des_i[i];      //国死亡总数排序//
s->dr_i[i]=dr_i[i];       //国病死率//
s->drs_i[i]=drs_i[i];      //国病死率排序//
       //将数据存放到新结点中//
        r->next=s;
        r=s;      //将新结点插入链表//
    }
    r->next='\0';        //置链表结束标志//

printf("世界数据储存完成!  \n");

    return head1;         // 返回表头指针//
}

查看全部
weixin_48264087
weixin_48264087
2020/06/06 22:13
  • c语言
  • 点赞
  • 收藏
  • 回答
    私信

1个回复