WY0708 发表于 2021-1-7 01:33:06

C

有哪位大佬帮忙看一下这个代码错在哪了吗?
显示的错误是undefined reference to "WinMain@16"?


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 100

typedef struct{
        char id;       //学号
        char name;    //姓名
        int score;       //课程成绩
        int sum;             //总分
        int aver;                //平均分
}Student;

typedef struct{
        Student elem;
        int last;    //最后一个元素的
}SqList;

int Number(void)
{
        int n;
        printf("请输入学生的人数\n");
        scanf("%d", &n);

        return n;//返回学生人数
}

int findname(SqList *L,Student e)   //按照姓名查找
{    /*用e返回L中第i个数据元素的值*/
    int i;
    for(i=0;i<L->last+1;i++)
        {
                if(!strcmp(L->elem.name,e.name)) //比较两个字符串是否相同
                return i+1;
    }
    return 0;
}

int findid(SqList *L,Student e)   //按照学号查找
{
    int i;//用e返回L中第i个数据元素的值
    for(i=0;i<L->last+1;i++)
        {
                if(!strcmp(L->elem.id,e.id)) //比较两个字符串是否相同
                return i+1;
    }
    return 0;
}

void aevgrade(SqList *L)
{
        int i,f,j = 0;
        double sum1 = 0.0,sum2 = 0.0,sum3 = 0.0;
        printf("(输入提示:语文请输入0\t数学请输入1\t英语请输入2)\n请输入需要查询的科目\n");
        scanf("%d",&f);
        switch(f){
        case 0:for(i = 0;i < L->last;i++){
                        sum1 = sum1 + L->elem.score;j++;}
                       printf("语文平均成绩: %0.2f\n",sum1 / j);break;
        case 1:for(i = 0;i < L->last;i++){
                       sum2 = sum2 + L->elem.score;j++;}
                        printf("数学平均成绩: %0.2f\n",sum2 / j);break;
        case 2:for(i = 0;i < L->last;i++){
                       sum3 = sum3 + L->elem.score;j++;}
                        printf("英语平均成绩: %0.2f\n",sum3 / j);break;
                }

}

void findscore(SqList *L)
{
        int h,l,f;
        printf("(提示:语文请输入0\t数学请输入1\t英语请输入2\t总分请输入3)\n请输入需要查询的科目\n");
        scanf("%d",&f);
        printf("请输入分数上限\n");
        scanf("%d",&h);
        printf("请输入分数下限\n");
        scanf("%d",&l);
        switch(f){
    case 0:
    case 1:
    case 2:
      for(int i=0;i<L->last;i++)
       {
       if(L->elem.score<=h&&L->elem.score>=l){
      printf("学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
      printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n", L->elem.id, L->elem.name, L->elem.score, L->elem.score, L->elem.score, L->elem.sum, L->elem.aver);
         }
           else{
      printf("没有在此区间的学生!");
           }
           break;
    case 3:
          for(int i=0;i<L->last;i++)
    {
       if(L->elem.sum<=h&&L->elem.sum>=l){
      printf("学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
      printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n", L->elem.id, L->elem.name, L->elem.score, L->elem.score, L->elem.score, L->elem.sum, L->elem.aver);
       }
           else{
      printf("没有在此区间的学生!");
           }
      }
      break;}
}

void menu(){
    printf("********************************************************************\n");
        printf("*-------------------------1.信息输入;------------------------------*\n");
        printf("*-------------------------2.信息输出;------------------------------*\n");
        printf("*-------------------------3.按姓名查找;----------------------------*\n");
        printf("*-------------------------4.按学号查找;----------------------------*\n");
        printf("*-------------------------5.课程平均分数;--------------------------*\n");
        printf("*-------------------------6.某段分数中的学生-----------------------*\n");
        printf("*-------------------------7.退出系统-------------------------------*\n");
        printf("********************************************************************\n");
        printf("\n");
}
int main()
{
        int i,x,temp,stemp,a;
        SqList L;
        Student e;
        while(1)
        {
          menu();
                printf("请选择1到7的操作:");
                scanf("%d",&a);
                printf("\n");
                switch(a)
                {
                        case 1:
                                x=Number();
                          for(i=0;i<x;i++)
                          {
                                  printf("第%d位学生信息\n",i+1);
                                  printf("\n");
                                  printf("学号:");
                                  scanf("%s",L.elem.id);
                                  printf("姓名:");
                                  scanf("%s",L.elem.name);
                                  printf("语文:");
                                  scanf("%d",&L.elem.score);
                                        printf("数学:");
                                  scanf("%d",&L.elem.score);
                                        printf("英语:");
                                  scanf("%d",&L.elem.score);
                                  printf("----------------------------------------\n");
                                        L.elem.sum= L.elem.score + L.elem.score + L.elem.score;//总分
                                        L.elem.aver = L.elem.sum /3;//平均分
                          }
                          L.last=x;
                          printf("\n");
                system("CLS");//清屏
                                break;

                        case 2:

                          printf("所有学生的成绩为:\n");
                                printf("学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
                          for(i=0;i<L.last;i++)
                          {
                                  printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n",L.elem.id,L.elem.name,L.elem.score,L.elem.score,L.elem.score,L.elem.sum,L.elem.aver);
                                }
                                printf("\n");
                                system("PAUSE");//冻结屏幕
                                system("CLS");//清屏
                                break;

                        case 3:

                          printf("请输入你要查找的姓名:");
                          scanf("%s",e.name);
                          temp=findname(&L,e);
                          if(temp!=0){
                printf("学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
                          printf("%s\t%s\t %d\t %d\t %d\t%d\t %d\n",L.elem.id,L.elem.name,L.elem.score,L.elem.score,L.elem.score,L.elem.sum,L.elem.aver);}
                          else{
                  printf("查找失败!\n");
                          }
                             system("PAUSE");//冻结屏幕
                          system("CLS");//清屏
                          break;

                        case 4:

                          printf("请输入你要查找的学号:");
                          scanf("%s",e.id);
                          stemp=findid(&L,e);
                          if(stemp!=0){
                printf("学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
                          printf("%s\t%s\t %d\t %d\t %d\t%d\t %d\n",L.elem.id,L.elem.name,L.elem.score,L.elem.score,L.elem.score,L.elem.sum,L.elem.aver);}
                          else{
                  printf("查找失败!\n");
                          }
                          system("PAUSE");//冻结屏幕
                          system("CLS");//清屏
                          break;

                        case 5:
                                aevgrade(&L);
                                system("PAUSE");//冻结屏幕
                                system("CLS");//清屏
                                break;

                        case 6:

                                findscore(&L);
                                system("PAUSE");//冻结屏幕
                                system("CLS");//清屏
                          break;

                        case 7:
                          {
                                  printf("\n退出系统成功!欢迎下次使用!\n");
                                  exit(0);
                                }
                                break;
                }
        }
        return 0;
}}

赫尔曼·迈耶 发表于 2021-1-7 04:27:55

findscore函数下case 2中的for语句最后漏了一个“}”,导致后面的函数都被视作findcore的内部函数了,所以编译器找不到main函数

风过无痕1989 发表于 2021-1-7 09:24:39

第99行缺少一个花括号,第235行多了一个花括号#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 100

typedef struct {
        char id;       //学号
        char name;    //姓名
        int score;         //课程成绩
        int sum;             //总分
        int aver;                //平均分
}Student;

typedef struct {
        Student elem;
        int last;    //最后一个元素的
}SqList;

int Number(void)
{
        int n;
        printf("请输入学生的人数\n");
        scanf("%d", &n);

        return n;//返回学生人数
}

int findname(SqList *L, Student e)   //按照姓名查找
{    /*用e返回L中第i个数据元素的值*/
        int i;
        for (i = 0;i<L->last + 1;i++)
        {
                if (!strcmp(L->elem.name, e.name)) //比较两个字符串是否相同
                        return i + 1;
        }
        return 0;
}

int findid(SqList *L, Student e)   //按照学号查找
{
        int i;//用e返回L中第i个数据元素的值
        for (i = 0;i<L->last + 1;i++)
        {
                if (!strcmp(L->elem.id, e.id)) //比较两个字符串是否相同
                        return i + 1;
        }
        return 0;
}

void aevgrade(SqList *L)
{
        int i, f, j = 0;
        double sum1 = 0.0, sum2 = 0.0, sum3 = 0.0;
        printf("(输入提示:语文请输入0\t数学请输入1\t英语请输入2)\n请输入需要查询的科目\n");
        scanf("%d", &f);
        switch (f) {
        case 0:for (i = 0;i < L->last;i++) {
                sum1 = sum1 + L->elem.score;j++;
        }
                   printf("语文平均成绩: %0.2f\n", sum1 / j);break;
        case 1:for (i = 0;i < L->last;i++) {
                sum2 = sum2 + L->elem.score;j++;
        }
                   printf("数学平均成绩: %0.2f\n", sum2 / j);break;
        case 2:for (i = 0;i < L->last;i++) {
                sum3 = sum3 + L->elem.score;j++;
        }
                   printf("英语平均成绩: %0.2f\n", sum3 / j);break;
        }

}

void findscore(SqList *L)
{
        int h, l, f;
        printf("(提示:语文请输入0\t数学请输入1\t英语请输入2\t总分请输入3)\n请输入需要查询的科目\n");
        scanf("%d", &f);
        printf("请输入分数上限\n");
        scanf("%d", &h);
        printf("请输入分数下限\n");
        scanf("%d", &l);
        switch (f)
        {
          case 0:
          case 1:
          case 2:
                for (int i = 0;i < L->last;i++)
                {
                        if (L->elem.score <= h&&L->elem.score >= l)
                        {
                                printf("学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
                                printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n", L->elem.id, L->elem.name, L->elem.score, L->elem.score, L->elem.score, L->elem.sum, L->elem.aver);
                        }
                        else
                        {
                                printf("没有在此区间的学生!");
                        }
                        break;
                }   // 缺少花括号
          case 3:
                for (int i = 0;i<L->last;i++)
                {
                        if (L->elem.sum <= h&&L->elem.sum >= l)
                        {
                                printf("学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
                                printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n", L->elem.id, L->elem.name, L->elem.score, L->elem.score, L->elem.score, L->elem.sum, L->elem.aver);
                        }
                        else
                        {
                                printf("没有在此区间的学生!");
                        }
                }
          break;
        }
}

void menu(){
                printf("********************************************************************\n");
                printf("*-------------------------1.信息输入;------------------------------*\n");
                printf("*-------------------------2.信息输出;------------------------------*\n");
                printf("*-------------------------3.按姓名查找;----------------------------*\n");
                printf("*-------------------------4.按学号查找;----------------------------*\n");
                printf("*-------------------------5.课程平均分数;--------------------------*\n");
                printf("*-------------------------6.某段分数中的学生-----------------------*\n");
                printf("*-------------------------7.退出系统-------------------------------*\n");
                printf("********************************************************************\n");
                printf("\n");
}
int main()
{
                int i, x, temp, stemp, a;
                SqList L;
                Student e;
                while (1)
                {
                        menu();
                        printf("请选择1到7的操作:");
                        scanf("%d", &a);
                        printf("\n");
                        switch (a)
                        {
                          case 1:
                                x = Number();
                                for (i = 0;i<x;i++)
                                {
                                        printf("第%d位学生信息\n", i + 1);
                                        printf("\n");
                                        printf("学号:");
                                        scanf("%s", L.elem.id);
                                        printf("姓名:");
                                        scanf("%s", L.elem.name);
                                        printf("语文:");
                                        scanf("%d", &L.elem.score);
                                        printf("数学:");
                                        scanf("%d", &L.elem.score);
                                        printf("英语:");
                                        scanf("%d", &L.elem.score);
                                        printf("----------------------------------------\n");
                                        L.elem.sum = L.elem.score + L.elem.score + L.elem.score;//总分
                                        L.elem.aver = L.elem.sum / 3;//平均分
                                }
                                L.last = x;
                                printf("\n");
                                system("CLS");//清屏
                                break;

                          case 2:

                                printf("所有学生的成绩为:\n");
                                printf("学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
                                for (i = 0;i<L.last;i++)
                                {
                                        printf("%s\t%s\t%d\t%d\t%d\t%d\t%d\n", L.elem.id, L.elem.name, L.elem.score, L.elem.score, L.elem.score, L.elem.sum, L.elem.aver);
                                }
                                printf("\n");
                                system("PAUSE");//冻结屏幕
                                system("CLS");//清屏
                                break;

                          case 3:

                                printf("请输入你要查找的姓名:");
                                scanf("%s", e.name);
                                temp = findname(&L, e);
                                if (temp != 0) {
                                        printf("学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
                                        printf("%s\t%s\t %d\t %d\t %d\t%d\t %d\n", L.elem.id, L.elem.name, L.elem.score, L.elem.score, L.elem.score, L.elem.sum, L.elem.aver);
                                }
                                else {
                                        printf("查找失败!\n");
                                }
                                system("PAUSE");//冻结屏幕
                                system("CLS");//清屏
                                break;

                          case 4:

                                printf("请输入你要查找的学号:");
                                scanf("%s", e.id);
                                stemp = findid(&L, e);
                                if (stemp != 0) {
                                        printf("学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
                                        printf("%s\t%s\t %d\t %d\t %d\t%d\t %d\n", L.elem.id, L.elem.name, L.elem.score, L.elem.score, L.elem.score, L.elem.sum, L.elem.aver);
                                }
                                else {
                                        printf("查找失败!\n");
                                }
                                system("PAUSE");//冻结屏幕
                                system("CLS");//清屏
                                break;

                          case 5:
                                aevgrade(&L);
                                system("PAUSE");//冻结屏幕
                                system("CLS");//清屏
                                break;

                          case 6:

                                findscore(&L);
                                system("PAUSE");//冻结屏幕
                                system("CLS");//清屏
                                break;

                          case 7:
                          {
                                  printf("\n退出系统成功!欢迎下次使用!\n");
                                  exit(0);
                          }
                break;
                }
/*                }*/    // 多了一个花括号
                return 0;
        }
}

WY0708 发表于 2021-1-7 10:38:25

风过无痕1989 发表于 2021-1-7 09:24
第99行缺少一个花括号,第235行多了一个花括号

明白了,谢谢
页: [1]
查看完整版本: C