我想把统计部分的代码改为统计各个班级的总人数,以及各个班级的男生人数和女生人数(关键词-#include)

这个代码每次统计男生人数和女生都是错误的,总是把女生人数加到男生人数上去,求解答?
我想把统计部分的代码改为统计各个班级的总人数,以及各个班级的男生人数和女生人数,可以帮忙改一下吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STUDENTS 100

struct Student {
    char name[50];
    int studentID;
    int classID;
    int gender;
};

// 全局学生数组和当前学生数量
struct Student students[MAX_STUDENTS];
int numStudents = 0;

// 函数声明
void addStudent();
void searchStudent();
void modifyStudent();
void deleteStudent();
void statistics();

int main() {
    int choice;

    while (1) {
        printf("\n请选择操作:\n");
        printf("1. 信息输入\n");
        printf("2. 信息查找\n");
        printf("3. 信息修改\n");
        printf("4. 信息删除\n");
        printf("5. 信息统计\n");
        printf("0. 退出\n");
        printf("请输入选项:");
        scanf("%d", &choice);

        switch (choice) {
        case 0:
            // 退出程序
            exit(0);
            break;

        case 1:
            // 信息输入
            addStudent();
            break;

        case 2:
            // 信息查找
            searchStudent();
            break;

        case 3:
            // 信息修改
            modifyStudent();
            break;

        case 4:
            // 信息删除
            deleteStudent();
            break;

        case 5:
            // 信息统计
            statistics();
            break;

        default:
            printf("无效的选项!\n");
            break;
        }
    }

    return 0;
}

// 信息输入
void addStudent() {
    if (numStudents >= MAX_STUDENTS) {
        printf("学生数量已达上限!\n");
        return;
    }

    printf("请输入学生姓名:");
    scanf("%s", students[numStudents].name);

    printf("请输入学生性别:");
    scanf("%d", &students[numStudents].studentID);

    printf("请输入学生学号:");
    scanf("%d", &students[numStudents].studentID);

    printf("请输入学生班级:");
    scanf("%d", &students[numStudents].classID);

    numStudents++;

    printf("学生信息添加成功!\n");
}

// 信息查找
void searchStudent() {
    int choice;

    printf("请选择查找方式:\n");
    printf("1. 按学号查找\n");
    printf("2. 按班级查找\n");
    printf("请输入选项:");
    scanf("%d", &choice);

    if (choice == 1) {
        int studentID;
        printf("请输入要查找的学号:");
        scanf("%d", &studentID);

        for (int i = 0; i < numStudents; i++) {
            if (students[i].studentID == studentID) {
                printf("学生姓名:%s\n", students[i].name);
                printf("学生性别:%d\n", students[i].gender);
                printf("学生学号:%d\n", students[i].studentID);
                printf("学生班级:%d\n", students[i].classID);
                return;
            }
        }

        printf("未找到匹配的学生!\n");
    }
    else if (choice == 2) {
        int classID;
        printf("请输入要查找的班级:");
        scanf("%d", &classID);

        for (int i = 0; i < numStudents; i++) {
            if (students[i].classID == classID) {
                printf("学生姓名:%s\n", students[i].name);
                printf("学生性别:%d\n", students[i].gender);
                printf("学生学号:%d\n", students[i].studentID);
                printf("学生班级:%d\n", students[i].classID);
                return;
            }
        }

        printf("未找到匹配的学生!\n");
    }
    else {
        printf("无效的选项!\n");
    }
}

// 信息修改
void modifyStudent() {
    int choice;

    printf("请选择修改方式:\n");
    printf("1. 按学号修改\n");
    printf("2. 按班级修改\n");
    printf("请输入选项:");
    scanf("%d", &choice);

    if (choice == 1) {
        int studentID;
        printf("请输入要修改的学号:");
        scanf("%d", &studentID);

        for (int i = 0; i < numStudents; i++) {
            if (students[i].studentID == studentID) {
                printf("请输入新的学生姓名:");
                scanf("%s", students[i].name);

                printf("请输入新的学生性别:");
                scanf("%d", &students[i].gender);

                printf("请输入新的学生班级:");
                scanf("%d", &students[i].classID);

                printf("学生信息修改成功!\n");
                return;
            }
        }

        printf("未找到匹配的学生!\n");
    }
    else if (choice == 2) {
        int classID;
        printf("请输入要修改的班级:");
        scanf("%d", &classID);

        for (int i = 0; i < numStudents; i++) {
            if (students[i].classID == classID) {
                printf("请输入新的学生姓名:");
                scanf("%s", students[i].name);

                printf("请输入新的学生性别:");
                scanf("%d", &students[i].gender);

                printf("请输入新的学生班级:");
                scanf("%d", &students[i].classID);

                printf("学生信息修改成功!\n");
                return;
            }
        }

        printf("未找到匹配的学生!\n");
    }
    else {
        printf("无效的选项!\n");
    }
}

// 信息删除
void deleteStudent() {
    int choice;

    printf("请选择删除方式:\n");
    printf("1. 按学号删除\n");
    printf("2. 按班级删除\n");
    printf("请输入选项:");
    scanf("%d", &choice);

    if (choice == 1) {
        int studentID;
        printf("请输入要删除的学号:");
        scanf("%d", &studentID);

        for (int i = 0; i < numStudents; i++) {
            if (students[i].studentID == studentID) {
                for (int j = i; j < numStudents - 1; j++) {
                    students[j] = students[j + 1];
                }

                numStudents--;
                printf("学生信息删除成功!\n");
                return;
            }
        }

        printf("未找到匹配的学生!\n");
    }
    else if (choice == 2) {
        int classID;
        printf("请输入要删除的班级:");
        scanf("%d", &classID);

        for (int i = 0; i < numStudents; i++) {
            if (students[i].classID == classID) {
                for (int j = i; j < numStudents - 1; j++) {
                    students[j] = students[j + 1];
                }

                numStudents--;
                printf("学生信息删除成功!\n");
                return;
            }
        }

        printf("未找到匹配的学生!\n");
    }
    else {
        printf("无效的选项!\n");
    }
}

// 信息统计
void statistics() {
    int numMales = 0;
    int numFemales = 0;
    int classCounts[MAX_STUDENTS];
    memset(classCounts, 0, sizeof(classCounts));

    for (int i = 0; i < numStudents; i++) {
        if (students[i].classID < 1 || students[i].classID > MAX_STUDENTS) {
            printf("班级信息错误,请重新输入学生信息!\n");
            return;
        }

        if (students[i].classID > 0) {
            classCounts[students[i].classID - 1]++;
        }

        // 统计男女人数
        // 假设性别用'0'表示男性,'1'表示女性
        if (students[i].gender == 0) {
            numMales++;
        }
        else if (students[i].gender == 1) {
            numFemales++;
        }
    }

    // 输出统计结果
    printf("班级人数统计:\n");
    for (int i = 0; i < MAX_STUDENTS; i++) {
        if (classCounts[i] > 0) {
            printf("班级 %d 人数:%d\n", i + 1, classCounts[i]);
        }
    }

    printf("男生人数:%d\n", numMales);
    printf("女生人数:%d\n", numFemales);
}

【以下回答由 GPT 生成】

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STUDENTS 100
#define MAX_CLASSES 10
#define MAX_NAME_LENGTH 50

struct Student {
    char name[MAX_NAME_LENGTH];
    int studentID;
    int classID;
    int gender;
};

// 全局学生数组和当前学生数量
struct Student students[MAX_STUDENTS];
int numStudents = 0;

// 函数声明
void addStudent();
void searchStudent();
void modifyStudent();
void deleteStudent();
void statistics();

int main() {
    int choice;

    while (1) {
        printf("\n请选择操作:\n");
        printf("1. 信息输入\n");
        printf("2. 信息查找\n");
        printf("3. 信息修改\n");
        printf("4. 信息删除\n");
        printf("5. 信息统计\n");
        printf("0. 退出\n");
        printf("请输入选项:");
        scanf("%d", &choice);

        switch (choice) {
        case 0:
            // 退出程序
            exit(0);
            break;

        case 1:
            // 信息输入
            addStudent();
            break;

        case 2:
            // 信息查找
            searchStudent();
            break;

        case 3:
            // 信息修改
            modifyStudent();
            break;

        case 4:
            // 信息删除
            deleteStudent();
            break;

        case 5:
            // 信息统计
            statistics();
            break;

        default:
            printf("无效选项,请重新输入!\n");
            break;
        }
    }

    return 0;
}

void addStudent() {
    if (numStudents >= MAX_STUDENTS) {
        printf("学生数量已达上限,无法继续添加!\n");
        return;
    }

    struct Student newStudent;

    printf("请输入学生姓名:");
    scanf("%s", newStudent.name);

    printf("请输入学生学号:");
    scanf("%d", &newStudent.studentID);

    printf("请输入学生班级:");
    scanf("%d", &newStudent.classID);

    printf("请输入学生性别(0表示男,1表示女):");
    scanf("%d", &newStudent.gender);

    students[numStudents] = newStudent;
    numStudents++;

    printf("学生信息添加成功!\n");
}

void searchStudent() {
    int studentID;
    int found = 0;

    printf("请输入要查找的学生学号:");
    scanf("%d", &studentID);

    for (int i = 0; i < numStudents; i++) {
        if (students[i].studentID == studentID) {
            printf("学生姓名:%s\n", students[i].name);
            printf("学生学号:%d\n", students[i].studentID);
            printf("学生班级:%d\n", students[i].classID);
            printf("学生性别:%s\n", students[i].gender == 0 ? "男" : "女");
            found = 1;
            break;
        }
    }

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

void modifyStudent() {
    int studentID;
    int found = 0;

    printf("请输入要修改的学生学号:");
    scanf("%d", &studentID);

    for (int i = 0; i < numStudents; i++) {
        if (students[i].studentID == studentID) {
            printf("请输入新的学生姓名:");
            scanf("%s", students[i].name);

            printf("请输入新的学生学号:");
            scanf("%d", &students[i].studentID);

            printf("请输入新的学生班级:");
            scanf("%d", &students[i].classID);

            printf("请输入新的学生性别(0表示男,1表示女):");
            scanf("%d", &students[i].gender);

            printf("\n学生信息修改成功!\n");
            found = 1;
            break;
        }
    }

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

void deleteStudent() {
    int studentID;
    int found = 0;

    printf("请输入要删除的学生学号:");
    scanf("%d", &studentID);

    for (int i = 0; i < numStudents; i++) {
        if (students[i].studentID == studentID) {
            for (int j = i; j < numStudents - 1; j++) {
                students[j] = students[j + 1];
            }
            numStudents--;
            printf("学生信息删除成功!\n");
            found = 1;
            break;
        }
    }

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

void statistics() {
    int classCounts[MAX_CLASSES] = {0};
    int maleCounts[MAX_CLASSES] = {0};
    int femaleCounts[MAX_CLASSES] = {0};

    for (int i = 0; i < numStudents; i++) {
        struct Student student = students[i];
        int classID = student.classID;

        classCounts[classID]++;
        if (student.gender == 0) {
            maleCounts[classID]++;
        } else {
            femaleCounts[classID]++;
        }
    }

    for (int i = 1; i < MAX_CLASSES; i++) {
        printf("班级%d:\n", i);
        printf("总人数:%d\n", classCounts[i]);
        printf("男生人数:%d\n", maleCounts[i]);
        printf("女生人数:%d\n\n", femaleCounts[i]);
    }
}


【相关推荐】



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

修改如下,改动处见注释,供参考:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_STUDENTS 100
#define MAX_ClassID  11     // 修改

struct Student {
    char name[50];
    int studentID;
    int classID;
    int gender;
};

// 全局学生数组和当前学生数量
struct Student students[MAX_STUDENTS];
int numStudents = 0;

// 函数声明
void addStudent();
void searchStudent();
void modifyStudent();
void deleteStudent();
void statistics();

int main() {
    int choice;

    while (1) {
        printf("\n请选择操作:\n");
        printf("1. 信息输入\n");
        printf("2. 信息查找\n");
        printf("3. 信息修改\n");
        printf("4. 信息删除\n");
        printf("5. 信息统计\n");
        printf("0. 退出\n");
        printf("请输入选项:");
        scanf("%d", &choice);

        switch (choice) {
        case 0:
            // 退出程序
            exit(0);
            break;

        case 1:
            // 信息输入
            addStudent();
            break;

        case 2:
            // 信息查找
            searchStudent();
            break;

        case 3:
            // 信息修改
            modifyStudent();
            break;

        case 4:
            // 信息删除
            deleteStudent();
            break;

        case 5:
            // 信息统计
            statistics();
            break;

        default:
            printf("无效的选项!\n");
            break;
        }
    }

    return 0;
}

// 信息输入
void addStudent() {
    if (numStudents >= MAX_STUDENTS) {
        printf("学生数量已达上限!\n");
        return;
    }

    printf("请输入学生姓名:");
    scanf("%s", students[numStudents].name);

    printf("请输入学生性别(0:男  1:女):");     // 修改
    scanf("%d", &students[numStudents].gender); // 修改
    //scanf("%d", &students[numStudents].studentID);

    printf("请输入学生学号:");
    scanf("%d", &students[numStudents].studentID);

    printf("请输入学生班级号(1 - 10):");    // 修改
    scanf("%d", &students[numStudents].classID);

    numStudents++;

    printf("学生信息添加成功!\n");
}

// 信息查找
void searchStudent() {
    int choice;

    printf("请选择查找方式:\n");
    printf("1. 按学号查找\n");
    printf("2. 按班级查找\n");
    printf("请输入选项:");
    scanf("%d", &choice);

    if (choice == 1) {
        int studentID;
        printf("请输入要查找的学号:");
        scanf("%d", &studentID);

        for (int i = 0; i < numStudents; i++) {
            if (students[i].studentID == studentID) {
                printf("学生姓名:%s\n", students[i].name);
                printf("学生性别:%d\n", students[i].gender);
                printf("学生学号:%d\n", students[i].studentID);
                printf("学生班级:%d\n", students[i].classID);
                return;
            }
        }

        printf("未找到匹配的学生!\n");
    }
    else if (choice == 2) {
        int classID;
        printf("请输入要查找的班级:");
        scanf("%d", &classID);

        for (int i = 0; i < numStudents; i++) {
            if (students[i].classID == classID) {
                printf("学生姓名:%s\n", students[i].name);
                printf("学生性别:%d\n", students[i].gender);
                printf("学生学号:%d\n", students[i].studentID);
                printf("学生班级:%d\n", students[i].classID);
                return;
            }
        }

        printf("未找到匹配的学生!\n");
    }
    else {
        printf("无效的选项!\n");
    }
}

// 信息修改
void modifyStudent() {
    int choice;

    printf("请选择修改方式:\n");
    printf("1. 按学号修改\n");
    printf("2. 按班级修改\n");
    printf("请输入选项:");
    scanf("%d", &choice);

    if (choice == 1) {
        int studentID;
        printf("请输入要修改的学号:");
        scanf("%d", &studentID);

        for (int i = 0; i < numStudents; i++) {
            if (students[i].studentID == studentID) {
                printf("请输入新的学生姓名:");
                scanf("%s", students[i].name);

                printf("请输入新的学生性别:");
                scanf("%d", &students[i].gender);

                printf("请输入新的学生班级:");
                scanf("%d", &students[i].classID);

                printf("学生信息修改成功!\n");
                return;
            }
        }

        printf("未找到匹配的学生!\n");
    }
    else if (choice == 2) {
        int classID;
        printf("请输入要修改的班级:");
        scanf("%d", &classID);

        for (int i = 0; i < numStudents; i++) {
            if (students[i].classID == classID) {
                printf("请输入新的学生姓名:");
                scanf("%s", students[i].name);

                printf("请输入新的学生性别:");
                scanf("%d", &students[i].gender);

                printf("请输入新的学生班级:");
                scanf("%d", &students[i].classID);

                printf("学生信息修改成功!\n");
                return;
            }
        }

        printf("未找到匹配的学生!\n");
    }
    else {
        printf("无效的选项!\n");
    }
}

// 信息删除
void deleteStudent() {
    int choice;

    printf("请选择删除方式:\n");
    printf("1. 按学号删除\n");
    printf("2. 按班级删除\n");
    printf("请输入选项:");
    scanf("%d", &choice);

    if (choice == 1) {
        int studentID;
        printf("请输入要删除的学号:");
        scanf("%d", &studentID);

        for (int i = 0; i < numStudents; i++) {
            if (students[i].studentID == studentID) {
                for (int j = i; j < numStudents - 1; j++) {
                    students[j] = students[j + 1];
                }

                numStudents--;
                printf("学生信息删除成功!\n");
                return;
            }
        }

        printf("未找到匹配的学生!\n");
    }
    else if (choice == 2) {
        int classID;
        printf("请输入要删除的班级:");
        scanf("%d", &classID);

        for (int i = 0; i < numStudents; i++) {
            if (students[i].classID == classID) {
                for (int j = i; j < numStudents - 1; j++) {
                    students[j] = students[j + 1];
                }

                numStudents--;
                printf("学生信息删除成功!\n");
                return;
            }
        }

        printf("未找到匹配的学生!\n");
    }
    else {
        printf("无效的选项!\n");
    }
}

// 信息统计
void statistics() {
    int numMales[MAX_ClassID] = { 0 };    //int numMales = 0;  修改
    int numFemales[MAX_ClassID] = { 0 };  //int numFemales = 0;修改
    int classCounts[MAX_ClassID] = { 0 }; //int classCounts[MAX_STUDENTS];  修改
    //memset(classCounts, 0, sizeof(classCounts)); 修改

    for (int i = 0; i < numStudents; i++) {
        //if (students[i].classID < 1 || students[i].classID > MAX_STUDENTS) { 修改
        //    printf("班级信息错误,请重新输入学生信息!\n");                    修改
        //    return;                                                            修改
        //}

        //if (students[i].classID > 0) {                                       修改
        classCounts[students[i].classID]++;                                 // 修改
        //}                                                                    修改

        // 统计男女人数
        // 假设性别用'0'表示男性,'1'表示女性
        if (students[i].gender == 0) 
            numMales[students[i].classID]++;
        else if (students[i].gender == 1) 
            numFemales[students[i].classID]++;
    }

    // 输出统计结果
    printf("班级人数统计:\n");
    for (int i = 1; i < MAX_ClassID; i++) {  //for (int i = 0; i < MAX_STUDENTS; i++) 修改
        if (classCounts[i]) 
            printf("班级 %d 总人数:%d ,男生:%d ,女生:%d\n", i, classCounts[i], numMales[i], numFemales[i]);
    }
    //printf("男生人数:%d\n", numMales);  修改
    //printf("女生人数:%d\n", numFemales);修改
}