其奈公何 发表于 2022-6-16 11:01:26

做了个学生信息管理系统,不知为何出错了C [Error] '' cannot be used as a function


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//-------类型定义----------
struct Student{
        char num;//学号
        char name;//姓名
        char major;//专业(computer,software,network)
        int classNo;//班级(1-2)
        int score;//3门课的成绩(0-2)
};
typedef struct Student STU;


//-------函数声明----------
void InputStudent(STU * p);
void Output(STU * p);
void SaveStudent(STU * p, int n);
void LoadStudent(STU * p, int n);
void Input(STU * p, int n);
void Sort_insert(STU *p, int n, char *major);
//-------主函数开始--------
#define N2//为了输入简单,数组长度定义为3
int main()
{        int k, j ,n ,x ,id;
        char a;
        STU students;
        STU tem;
        STU arrange;
        while(1) {
                printf("\n请输入功能编号,运行系统相应功能\n");
                printf("1-输入信息;2-文件存盘;3-打开文件; 4-输出文件; 5-对指定专业的指定科目进行排序\n");
                scanf("%d", &id);
                switch (id) {
                                case 1:
                        {
                                for (j=0; j<N; j++) {
                                        InputStudent(students+j);//输入信息
                                }
                                break;
                        }
                case 2:
                        {        getchar();//避免将输入2后的回车当文件名
                                SaveStudent(students, 10);//存到文件
                                break;
                        }
                case 3:
                                {
                                        printf("\n请输入您想取出文件中的前几个结构体信息(<%d)?\n", n);
                                        scanf("%d", &n);
                                        getchar();
                                        Input(tem,n);//从文件读
                                        break;
                                }
                case 4:
                        {
                                for (j=0; j<n; j++) {
                                                Output(tem+j);//输出信息
                                        }
                                break;                       
                        }
                case 5:
                        {
                                printf("\n请输入您想查找排名的专业:");
                                scanf("%s", a);
                                getchar();
                                printf("\n请输入您想查找排名的科目(0,1,2):");
                                scanf("%d", &x);
                                getchar();
                                Sort_insert(tem, x, a);
                                break;
                        }
                default:
                        {
                                break;
                        }
               
                }
                if ((id<1)||(id>5))
                        break;   //break while
        }       
}
//--――――――---输入函数----------
void InputStudent(STU * p) {
        int i;int classNo;
        printf("\n请输入学号,回车结束:");
        scanf("%s",p->num);
        getchar();
        printf("\n请输入姓名字符串,回车结束: ");
        gets(p->name);
        printf("\n请输入专业(computer,software,network)。回车结束:");
        gets(p->major);
        printf("\n请输入班级,回车结束:");
        scanf("%d",&p->classNo);
        getchar();
        printf("\n请输入三门课的整数成绩,每门成绩以回车结束:\n");
        for (i=0; i<3; i++){
                scanf("%d",&p->score);
                getchar();
               
        }
}

//----------写文件函数---------------
void SaveStudent(STU * p, int n)
{
        FILE *fp;
        char filename;
        int i;
        printf("\n请输入保存文件名:\n");
        gets(filename);
        if ((fp=fopen(filename, "wb"))==NULL) { //创建二进制文件
                printf("cannot open file\n");
                return;
        }
        for (i=0; i<n; i++){
                if (fwrite(p++, sizeof(Student), 1, fp)!=1)//向文件中一次写一个结构体量值
                        printf("file write error\n");
        }
        fclose(fp);
}

void Input(STU * p, int n)
{
        FILE *fp;
        char filename;
        printf("\n请输入打开文件名:\n");
        gets(filename);
        fp=fopen(filename, "rb");//打开二进制文件
        fread(p, sizeof(STU), n, fp);//从文件中一次读n个结构体量值
        fclose(fp);
}
void Output(STU *p) {
        printf("\n%s\t%s\t%s\t%d\t%d\t%d\t%d\n", p->num, p->name, p->major, p->classNo, p->score, p->score, p->score);
}
        int i,j,k,t,a;
    STU T;
void Sort_insert(STU *p, int n, char *major)
{
        a;
    for(i=0; i<N; i++)
          {
                        a=(p+i)->score;
                }
    for (i = 1; i < N; i++)
      {
                t = a;
                j = i - 1;
                for ( ; j >= 0 && a > t; j--)
                {
                        a = a;
                }
                a = t;
                T = *(p+i);
                for(k=i; k>j; k--)
                {
                        *(p+k) = *(p+k-1);
                                }
                *p(j+1) = T;
      }
      for(j=0; j<N; j++)
      {
                         if(strcmp((p+j)->major, major) == 0)
                         {
                                         Output(p+j);
                                   }
                }
    }


160        23        C:\Users\29577\Desktop\未命名1.cpp        'p' cannot be used as a function
注:如果去掉case 5其他功能可以正常运行。此程序case5得先打开文件后进入缓存区才能排序。

其奈公何 发表于 2022-6-16 11:02:19

昨晚做到了两点半,现在还是有错误,救救孩子吧{:10_284:}

新手迷茫 发表于 2022-6-16 12:09:34

有没有登分系统的???

leletatann 发表于 2022-6-16 13:02:28

我怀疑是指针的问题,应该是Sort_insert函数的错误。case5用到了Sort_insert函数,所以你去掉case5才会正常运行。

其奈公何 发表于 2022-6-16 15:53:56

我是傻逼,把*p(j+1) = T;改成*(p+i) = T;就可以了

leletatann 发表于 2022-6-16 20:48:17

其奈公何 发表于 2022-6-16 15:53
我是傻逼,把*p(j+1) = T;改成*(p+i) = T;就可以了

{:10_275:}
页: [1]
查看完整版本: 做了个学生信息管理系统,不知为何出错了C [Error] '' cannot be used as a function