怎么样获取学生数量呢,在我的getStuFromStruct()中

怎么样获取学生数量呢,在我的getStuFromStruct()中,会不会是我比较数组是否为空出问题有关系呢

#include <stdio.h>
#include <stdlib.h>
#define max 10
struct Student {
    char name[10];
    int yw;
    int sx;
    int yy;
} student[10],temp;//建立一个结构体数组,我这里设置的是里面最多存十个题目

void addStudent() {  //增加学生
    FILE* fp = fopen("student.txt", "a+");
    if(NULL == fp) { //确保成功打开文件,否则退出系统
        printf("数据获取失败!即将退出系统...");
        Sleep(3000);
        exit(0);
    }
    printf("请输入要添加的学生名字:");
    scanf("%s", temp.name);
    fwrite(&(temp),  sizeof(struct Student),1, fp);
    fclose(fp);
    printf("信息添加成功!\n");
}

void research() { //查询某位学生成绩
    //查找
    FILE* fp = fopen("student.txt", "r");
    if(NULL == fp) {
        printf("数据获取失败!即将退出系统...");
        Sleep(3000);
        exit(0);
    }
    //2 读取问文件内容并存到容器中
    int r, num = 0;
    r = fread(&student[num], sizeof(struct Student),1, fp);
    while(r) {
        num++;
        r = fread(&student[num], sizeof(struct Student),1, fp);
    }
    //3 关闭文件
    fclose(fp);
    char name[10]; //这个数组用来接收用户输入的题目
    int count = 0;
    printf("请输入学生名字\n");
    scanf("%s", name);
    while(count <= num) {
        if(strcmp(student[count].name, name) == 0){  //字符串的比较用strcmp();
            printf("名字:%s \n  语文:%d  数学:%d  英语:%d  \n", student[count].name, student[count].yw, student[count].sx, student[count].yy);
            break;
        }
        else {
            count++;
        }

    }
    if(count > num) {
        printf("未找到该学生!\n");
    }
}

void lookthroughAll() { //查看全部
    FILE* fp = fopen("student.txt", "r");
    if(NULL == fp) {
        printf("数据获取失败!即将退出系统...");
        Sleep(3000);
        exit(0);
    }
    //2 读取问文件内容并存到容器中
    int r, num = 0;
    r = fread(&student[num], sizeof(struct Student),1, fp);
    while(r) {
        num++;
        r = fread(&student[num], sizeof(struct Student),1, fp);
    }
    //3 关闭文件
    fclose(fp);
    int count = 0;
    while(count <= num) {
        printf("名字:%s  --语文:%d  数学:%d  英语:%d  \n", student[count].name, student[count].yw, student[count].sx, student[count].yy);
        count++;
    }
}

void reviseInformation(){  //登记成绩
    FILE *fp = fopen("student.txt", "r");
    if(NULL == fp) {
        printf("数据获取失败!即将退出系统...");
        Sleep(3000);
        exit(0);
    }
    //2 读取问文件内容并存到容器中
    int r, num = 0;
    r = fread(&student[num],  sizeof(struct Student),1, fp);
    while(r) {
        num++;
        r = fread(&student[num], sizeof(struct Student),1, fp);
    }
    //3 关闭文件
    fclose(fp);
    char name[10]; //接收输入的名字
    int count = 0;
    printf("请输入要登记成绩的学生名字:\n");
    scanf("%s", name);
    while(count <= num) {
        if(strcmp(student[count].name ,name) == 0){  //字符串的比较用strcmp();
            printf("请输入成绩(xx xx xx):");
            int yw,sx,yy;
            scanf("%d", &yw);
            scanf("%d", &sx);
            scanf("%d", &yy);
            student[count].yw = yw;
            student[count].sx = sx;
            student[count].yy = yy;
            printf("登记成功!\n");
            printf(":%d :%d :%d ",student[count].yw,student[count].sx,student[count].yy);
            break;
        }
        count++;
    }
    if(count > num) {
        printf("未找到该学生!\n");
    }
    fp = fopen("student.txt", "w");
    //写入数据
    count = 0;
    while(count <= num) {
        fwrite(&student[count],  sizeof(struct Student),1, fp);
        count++;
    }
    fclose(fp);
}

void deleteCourse() { //删除学生
    FILE* fp = fopen("student.txt", "r");
    if(NULL == fp) {
        printf("数据获取失败!即将退出系统...");
        Sleep(3000);
        exit(0);
    }
    //2 读取问文件内容并存到容器中
    int r, num = 0;
    r = fread(&student[num], sizeof(struct Student), 1, fp);
    while(r) {
        num++;
        r = fread(&student[num],  sizeof(struct Student),1, fp);
    }
    fclose(fp);
    char name[10];
    int count=0;
    printf("请输入想要删除的学生:");
    scanf("%s", &name);
    while(count <= num) {
        if(strcmp(student[count].name, name) == 0) { //字符串的比较用strcmp();
            for(; count < num; count++) {
                strcpy(student[count].name, student[count + 1].name );
                student[count].yw = student[count + 1].yw;
                student[count].sx = student[count + 1].sx;
                student[count].yy = student[count + 1].yy;
            }
            printf("删除成功!\n");
            break;
        } else {
            count++;
        }
    }
    if(count > num) {
        printf("未找到该学生信息!\n");
    }
    fp = fopen("student.txt", "w");
    //写入数据
    count = 0;
    getStuFromStruct();
    while(count < (getStuFromStruct()-1) ) {
        fwrite(&student[count],   sizeof(struct Student),1, fp);
        count++;
    }
    fclose(fp);
}

int getStuFromStruct(){  //获取学生个数
    int i,j=0;
    char f[10];
    for(;i<max;i++){
        if ( strcmp(student[i].name, f)==0) {
            printf("%d无学生  ",i);
        }else{
            j++;
        }
    }
    printf("\n学生数为:%d\n",j);
    return j;
}

int main()
{
    int i;
    while(1){
        printf(" 请输入模式:");
        scanf("%d",&i);
        switch (i){
            case 1:
                addStudent();   //添加 一个学生姓名
                break;
            case 2:
                research(); //查询某位学生成绩
                break;
            case 3:
                lookthroughAll();//查看全部学生内容
                break;
            case 4:
                reviseInformation();////给学生添加成绩
                break;
            case 5:
                deleteCourse(); //删除某个学生
                break;
            case 6:
                getStuFromStruct();//获取学生个数

        }

    }
}

int getStuFromStruct() 函数里,变量 i 没被初始化。

我不会呀

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    我的结构体包括学生的姓名,年龄和成绩三个变量,已经存储了多个学生的信息。

    以下是getStuFromStruct()函数的代码:

    def getStuFromStruct():
        students = []
        for student in stuInfo:
            students.append(student)
        return len(students)
    

    以上代码中,stuInfo是已经存储学生信息的结构体。 我并没有判断数组是否为空,因为在for循环中,如果结构体为空,则循环不会执行,函数返回值为0。

    因此,我认为判断数组是否为空与获取学生数量并没有直接的联系。 如果你仍有疑问,请提供更多信息,以便我们更好地理解你的问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^