c语言实现统计学生的成绩,按照等级划分统计个数

我这里面为什么出错呢?自己找不出来哪里有问题

img


最后的输出结果是这样的

img

原码第7行给变量ABCD赋初始值0

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7612062
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:C语言学习 关于函数的题目 输入一行字符,将此字符串中的最长的单词进行输出
  • 除此之外, 这篇博客: C语言拯救者 番外篇【通讯录】中的 我们退出程序后通讯录便被销毁了,我们又能否把我们所输入的名单保存至文件中,便于添加和查看? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 文件打开后需要销毁通讯录,把在程序中所写的通讯录保存至文件中

    void  DestoryContact(Contact* pc)
    {
    	free(pc->data);
    	pc->data = NULL;
    	pc->capacity = 0;
    	pc->sz = 0;
    	printf("销毁成功\n");
    }
    
    void SaveContact(const Contact* pc)
    {
    	FILE* pf =fopen("Contact.txt", "wb");//二进制方式写进去
    	if (pf == NULL)
    	{
    		perror("SaveContact::fopen");
    		return ;
    	}
    	//写文件
    	int i = 0;
    	for (i = 0; i < pc->sz; i++)
    	{
    		fwrite(pc->data + i, sizeof(PeoInfo), 1, pf);
    
    	}
    	printf("保存成功!\n");
    
    	//关闭文件
    	fclose(pf);
    	pf = NULL;
    }

     初始化通讯录 --文件版本

    把我们之前结束时保存的通讯录名单导入加载到程序中(初始化时)

    //初始化通讯录 --文件版本
    void LoadContact(Contact* pc)
    {
    	//打开文件
    	FILE*pf =fopen("Contact.txt", "rb");
    	if (pf == NULL)
    	{
    		perror("LoadContact::fopen");
    		return;
    	}
    	//读文件
    	PeoInfo tmp = { 0 };
    	while (fread(&tmp, sizeof(PeoInfo), 1, pf))//返回的数值比要求读写的count数据小,代表读写完成,如果返回0代表没读取到
    	{
    		//通讯录初始化也要扩容,防止数据大于初始值
    		CheckCapacity(pc);
    		pc->data[pc -> sz] = tmp;//读取一个信息放到sz中,因为默认sz=0
    		pc->sz++;
    	}
    	//关闭文件
    	fclose(pf);
    	pf = NULL;
    }
    
    void InitContact(Contact* pc)
    {
    	assert(pc);
    	pc->sz = 0;
    	pc->capacity = DEFAULF_SZ;
    	pc->data = (PeoInfo*)malloc(pc->capacity * sizeof(PeoInfo));
    	if (pc->data == NULL)
    	{
    		perror("InitContact:malloc");
    		return;
    	}
    	memset(pc->data, 0, pc->capacity * sizeof(PeoInfo));
    
    	//加载文件信息到通讯录中
    	LoadContact(pc);
    
    }