错哪了啊,在哪里加主函数main啊


#include "stdio.h" 
#include "string.h"
#include "stdlib.h"
#define MAX 1
#define OVERFLOW -2
#define OK 0
//顺序表
typedef struct {
    char number[20];
    char name[20];
    double mathscore;
    double englishscore;
    double computerscore;
    double averscore;
}student;
typedef struct{
    student *elem;//指向数据元素的基地址
    int length;//线性表的当前长度
}SqList;// 构造空的顺序表 L,顺序表初始化

int InitList(SqList *L)
{
L->elem=(student *)malloc(sizeof(student)*MAX); //malloc 函数开辟存储空间
    if(!L->elem)
        exit(OVERFLOW); 
    L->length=0; 
    return OK; 
} 
//录入
void luru(SqList &s){
    printf("请输入学生人数:");
    int n;
    scanf("%d", &n);
    s.length+=n;//方便后续数据直接插入,顺序表长度直接增加
    for (int i = 0; i < n; i++)
    {
        printf("输入第%d个学生的信息:\n",i+1);
        printf("学号:");
        scanf("%s", &s.elem[i].number);
        printf("姓名: ");
        scanf("%s", &s.elem[i].name);
        printf("数学成绩为:");
        scanf("%lf",&s.elem[i].mathscore);
        printf("英语成绩为:");
        scanf("%lf",&s.elem[i].englishscore);
        printf("计算机成绩为:");
        scanf("%lf",&s.elem[i].computerscore);
        printf("---------------------------------------\n");
    }
}
//定义函数向文件输入学生的数据
void shuchu(SqList &s,FILE *fp){
    int i;
    if((fp=fopen("input.dat","w"))==NULL){
        printf("不能打开文件!\n");
        return ; 
    } 
    //挨个遍历加入文件
    for(i=0;i<s.length;i++){
        fprintf(fp,"学号:%s\t姓名:%s\t数学成绩:%.1lf\t英语成绩:%.1lf\t计算机成绩:%.1lf\t平均分:%.1lf\n",
            s.elem[i].number,s.elem[i].name,s.elem[i].mathscore,
            s.elem[i].englishscore, s.elem[i].computerscore, s.elem[i].averscore);
    }    
    fclose(fp);//关闭文件,释放缓存
}
//对每个科目的成绩进行排序 ,从大到小
//数学
void mathsort(SqList &s,FILE *fp11){
    student temp;
    int i,j; 
    if((fp11=fopen("数学成绩排序.dat","w"))==NULL){
        printf("不能打开文件!\n");
        return ; 
    } 
    for(i=0;i<s.length;i++){
        s.elem[i].averscore=(s.elem[i].computerscore+s.elem[i].englishscore+s.elem[i].mathscore)/3;
    }
    for(i=0;i<s.length-1;i++){
        for(j=0;j<s.length-1-i;j++){
            if(s.elem[j].mathscore<s.elem[j+1].mathscore){
                temp=s.elem[j];
                s.elem[j]=s.elem[j+1];
                s.elem[j+1]=temp;
            }
        }
    }
    printf("数学排序:\n");
    fprintf(fp11,"数学排序:\n");
    for(i=0;i<s.length;i++){
        fprintf(fp11,"学号:%s\t姓名:%s\t数学成绩:%.1lf\t\n",
            s.elem[i].number,s.elem[i].name,s.elem[i].mathscore);
        printf("学号:%s\t姓名:%s\t数学成绩:%.1lf\t\n",
            s.elem[i].number,s.elem[i].name,s.elem[i].mathscore);
    }
    fclose(fp11);
}
//英语
void englishsort(SqList &s,FILE *fp12){
    student temp;
    int i,j; 
    if((fp12=fopen("英语成绩排序.dat","w"))==NULL){
        printf("不能打开文件!\n");
        return ; 
    } 
    for(i=0;i<s.length;i++){
        s.elem[i].averscore=(s.elem[i].computerscore+s.elem[i].englishscore+s.elem[i].mathscore)/3;
    }
    for(i=0;i<s.length-1;i++){
        for(j=0;j<s.length-1-i;j++){
            if(s.elem[j].englishscore<s.elem[j+1].englishscore){
                temp=s.elem[j];
                s.elem[j]=s.elem[j+1];
                s.elem[j+1]=temp;
            }
        }
    }
    printf("英语排序:\n");
    fprintf(fp12,"英语排序\n");
    for(i=0;i<s.length;i++){
        fprintf(fp12,"学号:%s\t姓名:%s\t英语成绩:%.1lf\t\n",
            s.elem[i].number,s.elem[i].name,s.elem[i].englishscore);
        printf("学号:%s\t姓名:%s\t数学成绩:%.1lf\t英语成绩:%.1lf\t\n",
            s.elem[i].number,s.elem[i].name,s.elem[i].mathscore,
            s.elem[i].englishscore, s.elem[i].computerscore, s.elem[i].averscore);
    }
    fclose(fp12);
}
//计算机
void computersort(SqList &s,FILE *fp13){
    student temp;
    int i,j; 
    if((fp13=fopen("计算机成绩排序.dat","w"))==NULL){
        printf("不能打开文件!\n");
        return ; 
    } 
    for(i=0;i<s.length;i++){
        s.elem[i].averscore=(s.elem[i].computerscore+s.elem[i].englishscore+s.elem[i].mathscore)/3;
    }    
    for(i=0;i<s.length-1;i++){
        for(j=0;j<s.length-1-i;j++){
            if(s.elem[j].computerscore<s.elem[j+1].computerscore){
                temp=s.elem[j];
                s.elem[j]=s.elem[j+1];
                s.elem[j+1]=temp;
            }
        }
    }
    printf("计算机排序:\n");
    fprintf(fp13,"计算机排序:\n");
    for(i=0;i<s.length;i++){
        fprintf(fp13,"学号:%s\t姓名:%s\t计算机成绩:%.1lf\t\n",
            s.elem[i].number,s.elem[i].name, s.elem[i].computerscore);
        printf("学号:%s\t姓名:%s\t计算机成绩:%.1lf\n",
            s.elem[i].number,s.elem[i].name, s.elem[i].computerscore);
    }
    fclose(fp13);
} 
//定义函数average,向文件输入学生的各科平均成绩
void average(SqList s,FILE *fp2)  
{
    int i,j;
    student temp;
    if((fp2=fopen("平均成绩排序.dat","w"))==NULL){
        printf("不能打开文件!");
        return ; 
    } 
    for(i=0;i<s.length;i++){
        s.elem[i].averscore=(s.elem[i].computerscore+s.elem[i].englishscore+s.elem[i].mathscore)/3;
    }
    for(i=0;i<s.length-1;i++){
        for(j=0;j<s.length-1-i;j++){
            if(s.elem[j].averscore<s.elem[j+1].averscore){
                temp=s.elem[j];
                s.elem[j]=s.elem[j+1];
                s.elem[j+1]=temp;
            }
        }
    }
    printf("按平均分排序:\n");
    fprintf(fp2,"按平均分排序:\n");
    for(i=0;i<s.length;i++){
        fprintf(fp2,"学号:%s\t姓名:%s\t数学成绩:%.1lf\t英语成绩:%.1lf\t计算机成绩:%.1lf\t平均分:%.1lf\n",
            s.elem[i].number,s.elem[i].name,s.elem[i].mathscore,
            s.elem[i].englishscore, s.elem[i].computerscore, s.elem[i].averscore);
        printf("学号:%s\t姓名:%s\t数学成绩:%.1lf\t英语成绩:%.1lf\t计算机成绩:%.1lf\t平均分:%.1lf\n",
            s.elem[i].number,s.elem[i].name,s.elem[i].mathscore,
            s.elem[i].englishscore, s.elem[i].computerscore, s.elem[i].averscore);
    }        
    fclose(fp2);
} 
//成绩分段
int fenduan(double x){
    if(x<60) return 0;
    else if(60<=x&&x<70) return 1;
    else if(70<=x&&x<80) return 2;
    else if(80<=x&&x<90) return 3;
    else if(90<=x&&x<=100) return 4;
}
//成绩分析,输出求出各门课程的平均成绩、最高分、最低分、不及格人数、
//60~69 分人数、70~79 分人数、80~89 分人数、90 分以上人数
void fenxi(SqList &s){
    double math_result[10],english_result[10],computer_result[10];
    for(int i=0;i<=9;i++){
        math_result[i]=0;
        english_result[i]=0;
        computer_result[i]=0;
    }
    math_result[6]=s.elem[0].mathscore;
    english_result[6]=s.elem[0].englishscore;
    computer_result[6]=s.elem[0].computerscore;
    math_result[7]=s.elem[0].mathscore;
    english_result[7]=s.elem[0].englishscore;
    computer_result[7]=s.elem[0].computerscore;
    for ( int i = 0; i < s.length; i++)
    {
        //每科总成绩
        math_result[0]+=s.elem[i].mathscore;
        english_result[0]+=s.elem[i].englishscore;
        computer_result[0]+=s.elem[i].computerscore;
        //分数段统计
        //数学
        int q1=fenduan(s.elem[i].mathscore);
        switch (q1)
        {
        case 0:
            math_result[1]=math_result[1]+1;
            break;
        case 1:
            math_result[2]=math_result[2]+1;
            break;
        case 2:
            math_result[3]=math_result[3]+1;
            break;
        case 3:
            math_result[4]=math_result[4]+1;
            break;
        case 4:
            math_result[5]=math_result[5]+1;
        }
        
        //英语
        int q2=fenduan(s.elem[i].englishscore);
        switch (q2)
        {
        case 0:
            english_result[1]=english_result[1]+1;
            break;
        case 1:
            english_result[2]=english_result[2]+1;
            break;
        case 2:
            english_result[3]=english_result[3]+1;
            break;
        case 3:
            english_result[4]=english_result[4]+1;
            break;
        case 4:
            english_result[5]=english_result[5]+1;
            break;
        }
        //计算机
        int q3=fenduan(s.elem[i].computerscore);
        switch (q3)
        {
        case 0:
            computer_result[1]=computer_result[1]+1;
            break;
        case 1:
            computer_result[2]=computer_result[2]+1;
            break;
        case 2:
            computer_result[3]=computer_result[3]+1;
            break;
        case 3:
            computer_result[4]=computer_result[4]+1;
            break;
        case 4:
            computer_result[5]=computer_result[5]+1;
            break;
        }
        //最大最小值
        if(s.elem[i].mathscore>math_result[6]){
            math_result[6]=s.elem[i].mathscore;
        }
        if(s.elem[i].englishscore>english_result[6]){
            english_result[6]=s.elem[i].englishscore;
        }
        if(s.elem[i].computerscore>computer_result[6]){
            computer_result[6]=s.elem[i].computerscore;
        }
        if(s.elem[i].mathscore<math_result[7]){
            math_result[7]=s.elem[i].mathscore;
        }
        if(s.elem[i].englishscore<english_result[6]){
            english_result[7]=s.elem[i].englishscore;
        }
        if(s.elem[i].computerscore<computer_result[7]){
            computer_result[7]=s.elem[i].computerscore;
        }
    }
    //平均分
    math_result[0] = math_result[0] / s.length;
    english_result[0] = english_result[0] / s.length;
    computer_result[0] = computer_result[0] / s.length;
    
    printf("数学课的平均分为:%.1lf\n",math_result[0]);
    printf("数学课分数不及格人数为:%.lf\n",math_result[1]);
    printf("数学课分数在60~69的人数为:%.lf\n",math_result[2]);
    printf("数学课分数在70~79的人数为:%.lf\n",math_result[3]);
    printf("数学课分数在80~89的人数为:%.lf\n",math_result[4]);
    printf("数学课分数在90~100的人数为:%.lf\n",math_result[5]);
    printf("数学课分数最高为:%.1lf\n",math_result[6]);
    printf("数学课分数最低为:%.1lf\n",math_result[7]);
    printf("英语课的平均分为:%.1lf\n",english_result[0]);
    printf("英语课分数不及格人数为:%.lf\n",english_result[1]);
    printf("英语课分数在60~69的人数为:%.lf\n",english_result[2]);
    printf("英语课分数在70~79的人数为:%.lf\n",english_result[3]);
    printf("英语课分数在80~89的人数为:%.lf\n",english_result[4]);
    printf("英语课分数在90~100的人数为:%.lf\n",english_result[5]);
    printf("英语课分数最高为:%.1lf\n",english_result[6]);
    printf("英语课分数最低为:%.1lf\n",english_result[7]);
    printf("计算机课的平均分为:%.1lf\n",computer_result[0]);
    printf("计算机课分数不及格人数为:%.lf\n",computer_result[1]);
    printf("计算机课分数在60~69的人数为:%.lf\n",computer_result[2]);
    printf("计算机课分数在70~79的人数为:%.lf\n",computer_result[3]);
    printf("计算机课分数在80~89的人数为:%.lf\n",computer_result[4]);
    printf("计算机课分数在90~100的人数为:%.lf\n",computer_result[5]);
    printf("计算机课分数最高为:%.1f\n",computer_result[6]);
    printf("计算机课分数最低为:%.1f\n",computer_result[7]);
}
//学号查找
void xuehao(SqList &s,char key[]){
    int count=0;
    for(int i=0;i<s.length;i++){
        s.elem[i].averscore=(s.elem[i].computerscore+s.elem[i].englishscore+s.elem[i].mathscore)/3;
    }
    for ( int i = 0; i < s.length; i++)
    {//是否匹配
        if (strcmp(s.elem[i].number,key) == 0)
        {
            printf("第%d个学生:\n学号:%s\n姓名:%s\n数学成绩:%.1lf\n英语成绩:%.1lf\n计算机成绩:%.1lf\n平均分:%.1lf\n",
                i+1,s.elem[i].number,s.elem[i].name,s.elem[i].mathscore,
                s.elem[i].englishscore, s.elem[i].computerscore, s.elem[i].averscore);
            count=1;
        }
    }
    if(count==0){
        printf("查找的学生不存在\n");
    }
}
//姓名查找
void xingming(SqList &s,char ch[]){
    int flag=0,count;
    char num[20];
    for(int i=0;i<s.length;i++){
        s.elem[i].averscore=(s.elem[i].computerscore+s.elem[i].englishscore+s.elem[i].mathscore)/3;
    }
    for ( int i = 0; i < s.length; i++)
    {
        if (strcmp(s.elem[i].name,ch) == 0)
        {
            flag = flag+1;
            count=i;
        }
    }
    //避免重名,学号不会重复
    if(flag>1){
        printf("出现重名,请输入待查找同学学号:\n");
        scanf("%s",&num);
        xuehao(s,num);
    }
    else if(flag==1){
        printf("第%d个学生:\n学号:%s\n姓名:%s\n数学成绩:%.1lf\n英语成绩:%.1lf\n计算机成绩:%.1lf\n平均分:%.1lf\n",
            count+1,s.elem[count].number,s.elem[count].name,s.elem[count].mathscore,
            s.elem[count].englishscore, s.elem[count].computerscore, s.elem[count].averscore);
    }
    else{
        printf("查找的学生不存在!\n");
    }
}

首先是main,不是mian
其次,main返回类型用int,不要用void
int main()
{
}

最下面加就好。另外,如果你是用 VS 创建的控制台项目,本身就有main函数,把你自己写的加进去就好了。

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7639802
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:带参数的main函数
  • 除此之外, 这篇博客: C语言一定是从main函数开始执行的吗?中的 总结 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 所以C语言是不是一定从main开始,至少单片机不是,所以其他编译环境应该也可以修改入口函数

  • 您还可以看一下 李南江老师的零基础学会C语言课程中的 main函数的其它写法小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    在C++程序中,主函数main是整个程序的入口,它是程序的必要组成部分。在编写代码时,我们应该在文件中定义一个正确的main函数,确保程序可以被正确执行。一般情况下,我们需要在main函数中调用其他函数实现程序的功能,因此我们需要了解函数调用的原理和栈桢的创建和销毁过程。具体实现的步骤如下:

    1. 在文件中定义正确的main函数,可以选择不带参数的int main()或者带参数的int main(int argc, char* argv[]),其中argc表示命令行参数个数,argv表示每个参数的字符串数组。

    2. 在main函数中调用其他自定义函数,例如Add(a,b)。

    3. 进入Add函数,将Add的ebp赋值给此时的ebx,然后申请对应的栈空间,将Add的esi和edi压入栈中,紧接着清空栈空间,保存返回地址,定义变量sum并赋初值为0,然后将形参a和b相加,将结果赋给sum,最后返回sum的值。

    4. 返回到main函数流程继续执行。

    在程序中应该保证每一个函数的输入和输出都是确定的,这也保证了程序的健壮性和可重用性。同时,在编写代码时应该注意安全问题,防止崩溃和内存泄漏等问题的出现。