鱼C论坛

 找回密码
 立即注册
查看: 1377|回复: 5

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

[复制链接]
发表于 2022-6-16 11:01:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//-------类型定义----------
struct Student{
        char num[15];//学号
        char name[15];//姓名
        char major[10];//专业(computer,software,network)
        int classNo;//班级(1-2)
        int score[3];//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 N  2  //为了输入简单,数组长度定义为3
int main()
{        int k, j ,n ,x ,id;
        char a[10];
        STU students[N];
        STU tem[N];
        STU arrange[N];
        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[i]);
                getchar();
               
        }
}

//----------写文件函数---------------
void SaveStudent(STU * p, int n)
{
        FILE *fp;
        char filename[20];
        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[20];
        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[0], p->score[1], p->score[2]);
}
        int i,j,k,t,a[N];
    STU T;
void Sort_insert(STU *p, int n, char *major)
{
        a[N];
    for(i=0; i<N; i++)
            {
                        a[i]=(p+i)->score[n];
                }
    for (i = 1; i < N; i++)
        {
                t = a[i];
                j = i - 1;
                for ( ; j >= 0 && a[j] > t; j--)
                {
                        a[j+1] = a[j];
                }
                a[j+1] = 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        [Error] 'p' cannot be used as a function
注:如果去掉case 5其他功能可以正常运行。此程序case5得先打开文件后进入缓存区才能排序。

最佳答案
2022-6-16 13:02:28
我怀疑是指针的问题,应该是Sort_insert函数的错误。case5用到了Sort_insert函数,所以你去掉case5才会正常运行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-6-16 11:02:19 | 显示全部楼层
昨晚做到了两点半,现在还是有错误,救救孩子吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-16 12:09:34 | 显示全部楼层
有没有登分系统的???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-16 13:02:28 | 显示全部楼层    本楼为最佳答案   
我怀疑是指针的问题,应该是Sort_insert函数的错误。case5用到了Sort_insert函数,所以你去掉case5才会正常运行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-16 15:53:56 | 显示全部楼层
我是傻逼,把*p(j+1) = T;改成*(p+i) = T;就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-16 20:48:17 | 显示全部楼层
其奈公何 发表于 2022-6-16 15:53
我是傻逼,把*p(j+1) = T;改成*(p+i) = T;就可以了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 13:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表