c程序改不对了,求帮助

改了一周了,现在还有一个错误实在不会改,是我对指针的理解有问题吗😭😭怎么还说我没定义
以下是完整代码

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

#define MAX_TEACHERS 100

typedef struct {
    char id[10]; // 教师号
    char name[20]; // 姓名
    char gender[10]; // 性别
    char unit[50]; // 单位名称
    char address[50]; // 家庭住址
    char phone[20]; // 联系电话
    double salary; // 基本工资
    double allowance; // 津贴
    double subsidy; // 生活补贴
    double pay; // 应发工资
    double phone_bill; // 电话费
    double utility_bill; // 水电费
    double rent; // 房租
    double tax; // 所得税
    double health_insurance; // 卫生费
    double fund; // 公积金
    double deduction; // 合计扣款
    double net_pay; // 实发工资
} Teacher;

int num_teachers = 0; // 已经输入的教师数量
Teacher teachers[MAX_TEACHERS]; // 教师数组

// 根据教师号查找教师在数组中的位置,找不到返回-1
int find_teacher(char *id) {
    int i;
    for (i = 0; i < num_teachers; i++) {
        if (strcmp(teachers[i].id, id) == 0) {
            return i;
        }
    }
    return -1;
}

// 输入一个教师的信息
void input_teacher(Teacher *t) {
    printf("请输入教师编号:");
    scanf("%s", t->id);
    printf("请输入姓名:");
    scanf("%s", t->name);
    printf("请输入性别:");
    scanf("%s", t->gender);
    printf("请输入单位名称:");
    scanf("%s", t->unit);
    printf("请输入家庭住址:");
    scanf("%s", t->address);
    printf("请输入联系电话:");
    scanf("%s", t->phone);
    printf("请输入基本工资:");
    scanf("%lf", &t->salary);
    printf("请输入津贴:");
    scanf("%lf", &t->allowance);
    printf("请输入生活补贴:");
    scanf("%lf", &t->subsidy);
}

// 插入(修改)教师信息
void modify_teacher() {
    char id[10];
    int pos = -1;

    printf("请输入要修改的教师编号:");
    scanf("%s", id);
    pos = find_teacher(id);

    if (pos == -1) {
        printf("没有找到教师编号为%s的信息。\n", id);
    } else {
        Teacher *t = &teachers[pos];
        printf("当前信息如下:\n");
        printf("教师编号:%s", t->id);
        printf("姓名:%s", t->name);
        printf("性别:%s", t->gender);
        printf("单位名称:%s", t->unit);
        printf("家庭住址:%s", t->address);
        printf("联系电话:%s", t->phone);
        printf("基本工资:%.2lf", t->salary);
        printf("津贴:%.2lf", t->allowance);
        printf("生活补贴:%.2lf", t->subsidy);

        input_teacher(t);

        // 计算应发工资、合计扣款、实发工资
        t->pay = t->salary + t->allowance + t->subsidy;
        printf("请输入电话费:");
        scanf("%lf", &t->phone_bill);
        printf("请输入水电费:");
        scanf("%lf", &t->utility_bill);
        printf("请输入房租:");
        scanf("%lf", &t->rent);
        printf("请输入所得税:");
        scanf("%lf", &t->tax);
        printf("请输入卫生费:");
        scanf("%lf", &t->health_insurance);
        printf("请输入公积金:");
        scanf("%lf", &t->fund);
        t->deduction = t->phone_bill + t->utility_bill + t->rent + t->tax + t->health_insurance + t->fund;
        t->net_pay = t->pay - t->deduction;

        printf("修改成功!\n");
    }
}

// 删除教师信息
void delete_teacher() {
    char id[10];
    int i, pos = -1;

    printf("请输入要删除的教师编号:");
    scanf("%s", id);

    pos = find_teacher(id);

    if (pos == -1) {
        printf("没有找到教师编号为%s的信息。\n", id);
    } else {
        Teacher *t = &teachers[pos];
        printf("确认要删除以下信息吗?\n");
        printf("教师编号:%s", t->id);
        printf("姓名:%s", t->name);
        printf("性别:%s", t->gender);
        printf("单位名称:%s", t->unit);
        printf("家庭住址:%s", t->address);
        printf("联系电话:%s", t->phone);
        printf("基本工资:%.2lf", t->salary);
        printf("津贴:%.2lf", t->allowance);
        printf("生活补贴:%.2lf", t->subsidy);
        printf("应发工资:%.2lf", t->pay);
        printf("电话费:%.2lf", t->phone_bill);
        printf("水电费:%.2lf", t->utility_bill);
        printf("房租:%.2lf", t->rent);
        printf("所得税:%.2lf", t->tax);
        printf("卫生费:%.2lf", t->health_insurance);
        printf("公积金:%.2lf", t->fund);
        printf("合计扣款:%.2lf", t->deduction);
        printf("实发工资:%.2lf", t->net_pay);
        printf("确认删除请按1,取消请按0:");
        scanf("%d", &i);
        if (i == 1) {
            printf("已删除教师编号为%s的信息。\n", id);
            for (i = pos; i < num_teachers - 1; i++) {
                teachers[i] = teachers[i+1];
            }
            num_teachers--;
        } else {
            printf("已取消删除。\n");
        }
    }
}// 浏览教师信息
void browse_teachers() {
    int i;
    if (num_teachers == 0) {
        printf("没有输入任何教师信息。\n");
    } else {
        printf("教师编号\t姓名\t性别\t单位名称\t家庭住址\t联系电话\t应发工资\t实发工资");
        for (i = 0; i < num_teachers; i++) {
            printf("%s\t%s\t%s\t%s\t%s\t%s\t%.2lf\t%.2lf", 
                teachers[i].id, teachers[i].name, teachers[i].gender, teachers[i].unit,
                teachers[i].address, teachers[i].phone, teachers[i].pay, teachers[i].net_pay);
        }
    }
}

// 按教师号录入教师基本数据
void input_teacher_data() {
    char id[10];
    int pos = -1;

    printf("请输入要输入基本数据的教师编号:");
    scanf("%s", id);

    pos = find_teacher(id);

    if (pos == -1) {
        printf("没有找到教师编号为%s的信息。\n", id);
    } else {
        Teacher *t = &teachers[pos];
        printf("请输入电话费:");
        printf("(如无,则输入0)");
        scanf("%lf", &t->phone_bill);
        printf("请输入水电费:");
        printf("(如无,则输入0)");
        scanf("%lf", &t->utility_bill);
        printf("请输入房租:");
        printf("(如无,则输入0)");
        scanf("%lf", &t->rent);
        printf("请输入所得税:");
        printf("(如无,则输入0)");
        scanf("%lf", &t->tax);
        printf("请输入卫生费:");
        printf("(如无,则输入0)");
        scanf("%lf", &t->health_insurance);
        printf("请输入公积金:");
        printf("(如无,则输入0)");
        scanf("%lf", &t->fund);
        t->deduction = t->phone_bill + t->utility_bill + t->rent + t->tax + t->health_insurance + t->fund; // 合计扣款
        t->net_pay = t->pay - t->deduction; // 实发工资

        printf("已成功输入教师编号为%s的基本数据。\n", id);
    }
}

// 主函数
int main() {
    int choice;

    while (1) {
        printf("请选择功能:\n");
        printf("1.输入一个教师的信息");
        printf("2. 插入(修改)教师信息");
        printf("3. 删除教师信息");
        printf("4. 浏览教师信息");
        printf("5. 输入教师基本数据");
        printf("0. 退出");
        printf("请选择:");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                input_teacher(&teachers);
                break;
            case 2:
                modify_teacher();
                break;
            case 3:
                delete_teacher();
                break;
            case 4:
                browse_teachers();
                break;
            case 5:
                input_teacher_data();
                break;
            case 0:
                printf("欢迎再次使用教师工资管理系统,再见!\n");
                exit(0);
                break;
            default:
                printf("输入有误,请重新选择功能。\n");
                break;
        }
    }

    return 0;
}


这个地方 修改

case 1:
                input_teacher(&teachers[num_teachers]);
                ++num_teachers;
                break;

这样改,然后添加stdio

#include <stdio.h>

完整的代码如下


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

typedef struct {
    char id[10]; // 教师号
    char name[20]; // 姓名
    char gender[10]; // 性别
    char unit[50]; // 单位名称
    char address[50]; // 家庭住址
    char phone[20]; // 联系电话
    double salary; // 基本工资
    double allowance; // 津贴
    double subsidy; // 生活补贴
    double pay; // 应发工资
    double phone_bill; // 电话费
    double utility_bill; // 水电费
    double rent; // 房租
    double tax; // 所得税
    double health_insurance; // 卫生费
    double fund; // 公积金
    double deduction; // 合计扣款
    double net_pay; // 实发工资
} Teacher;

int num_teachers = 0; // 已经输入的教师数量
Teacher teachers[MAX_TEACHERS]; // 教师数组

// 根据教师号查找教师在数组中的位置,找不到返回-1
int find_teacher(char *id) {
    int i;
    for (i = 0; i < num_teachers; i++) {
        if (strcmp(teachers[i].id, id) == 0) {
            return i;
        }
    }
    return -1;
}

// 输入一个教师的信息
void input_teacher(Teacher *t) {
    printf("请输入教师编号:");
    scanf("%s", t->id);
    printf("请输入姓名:");
    scanf("%s", t->name);
    printf("请输入性别:");
    scanf("%s", t->gender);
    printf("请输入单位名称:");
    scanf("%s", t->unit);
    printf("请输入家庭住址:");
    scanf("%s", t->address);
    printf("请输入联系电话:");
    scanf("%s", t->phone);
    printf("请输入基本工资:");
    scanf("%lf", &t->salary);
    printf("请输入津贴:");
    scanf("%lf", &t->allowance);
    printf("请输入生活补贴:");
    scanf("%lf", &t->subsidy);
}

// 插入(修改)教师信息
void modify_teacher() {
    char id[10];
    int pos = -1;

    printf("请输入要修改的教师编号:");
    scanf("%s", id);
    pos = find_teacher(id);

    if (pos == -1) {
        printf("没有找到教师编号为%s的信息。\n", id);
    } else {
        Teacher *t = &teachers[pos];
        printf("当前信息如下:\n");
        printf("教师编号:%s", t->id);
        printf("姓名:%s", t->name);
        printf("性别:%s", t->gender);
        printf("单位名称:%s", t->unit);
        printf("家庭住址:%s", t->address);
        printf("联系电话:%s", t->phone);
        printf("基本工资:%.2lf", t->salary);
        printf("津贴:%.2lf", t->allowance);
        printf("生活补贴:%.2lf", t->subsidy);

        input_teacher(t);

        // 计算应发工资、合计扣款、实发工资
        t->pay = t->salary + t->allowance + t->subsidy;
        printf("请输入电话费:");
        scanf("%lf", &t->phone_bill);
        printf("请输入水电费:");
        scanf("%lf", &t->utility_bill);
        printf("请输入房租:");
        scanf("%lf", &t->rent);
        printf("请输入所得税:");
        scanf("%lf", &t->tax);
        printf("请输入卫生费:");
        scanf("%lf", &t->health_insurance);
        printf("请输入公积金:");
        scanf("%lf", &t->fund);
        t->deduction = t->phone_bill + t->utility_bill + t->rent + t->tax + t->health_insurance + t->fund;
        t->net_pay = t->pay - t->deduction;

        printf("修改成功!\n");
    }
}

// 删除教师信息
void delete_teacher() {
    char id[10];
    int i, pos = -1;

    printf("请输入要删除的教师编号:");
    scanf("%s", id);

    pos = find_teacher(id);

    if (pos == -1) {
        printf("没有找到教师编号为%s的信息。\n", id);
    } else {
        Teacher *t = &teachers[pos];
        printf("确认要删除以下信息吗?\n");
        printf("教师编号:%s", t->id);
        printf("姓名:%s", t->name);
        printf("性别:%s", t->gender);
        printf("单位名称:%s", t->unit);
        printf("家庭住址:%s", t->address);
        printf("联系电话:%s", t->phone);
        printf("基本工资:%.2lf", t->salary);
        printf("津贴:%.2lf", t->allowance);
        printf("生活补贴:%.2lf", t->subsidy);
        printf("应发工资:%.2lf", t->pay);
        printf("电话费:%.2lf", t->phone_bill);
        printf("水电费:%.2lf", t->utility_bill);
        printf("房租:%.2lf", t->rent);
        printf("所得税:%.2lf", t->tax);
        printf("卫生费:%.2lf", t->health_insurance);
        printf("公积金:%.2lf", t->fund);
        printf("合计扣款:%.2lf", t->deduction);
        printf("实发工资:%.2lf", t->net_pay);
        printf("确认删除请按1,取消请按0:");
        scanf("%d", &i);
        if (i == 1) {
            printf("已删除教师编号为%s的信息。\n", id);
            for (i = pos; i < num_teachers - 1; i++) {
                teachers[i] = teachers[i+1];
            }
            num_teachers--;
        } else {
            printf("已取消删除。\n");
        }
    }
}// 浏览教师信息
void browse_teachers() {
    int i;
    if (num_teachers == 0) {
        printf("没有输入任何教师信息。\n");
    } else {
        printf("教师编号\t姓名\t性别\t单位名称\t家庭住址\t联系电话\t应发工资\t实发工资");
        for (i = 0; i < num_teachers; i++) {
            printf("%s\t%s\t%s\t%s\t%s\t%s\t%.2lf\t%.2lf", 
                teachers[i].id, teachers[i].name, teachers[i].gender, teachers[i].unit,
                teachers[i].address, teachers[i].phone, teachers[i].pay, teachers[i].net_pay);
        }
    }
}

// 按教师号录入教师基本数据
void input_teacher_data() {
    char id[10];
    int pos = -1;

    printf("请输入要输入基本数据的教师编号:");
    scanf("%s", id);

    pos = find_teacher(id);

    if (pos == -1) {
        printf("没有找到教师编号为%s的信息。\n", id);
    } else {
        Teacher *t = &teachers[pos];
        printf("请输入电话费:");
        printf("(如无,则输入0)");
        scanf("%lf", &t->phone_bill);
        printf("请输入水电费:");
        printf("(如无,则输入0)");
        scanf("%lf", &t->utility_bill);
        printf("请输入房租:");
        printf("(如无,则输入0)");
        scanf("%lf", &t->rent);
        printf("请输入所得税:");
        printf("(如无,则输入0)");
        scanf("%lf", &t->tax);
        printf("请输入卫生费:");
        printf("(如无,则输入0)");
        scanf("%lf", &t->health_insurance);
        printf("请输入公积金:");
        printf("(如无,则输入0)");
        scanf("%lf", &t->fund);
        t->deduction = t->phone_bill + t->utility_bill + t->rent + t->tax + t->health_insurance + t->fund; // 合计扣款
        t->net_pay = t->pay - t->deduction; // 实发工资

        printf("已成功输入教师编号为%s的基本数据。\n", id);
    }
}

// 主函数
int main() {
    int choice;

    while (1) {
        printf("请选择功能:\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 1:
                input_teacher(&teachers[num_teachers]);
                ++num_teachers;
                break;
            case 2:
                modify_teacher();
                break;
            case 3:
                delete_teacher();
                break;
            case 4:
                browse_teachers();
                break;
            case 5:
                input_teacher_data();
                break;
            case 0:
                printf("欢迎再次使用教师工资管理系统,再见!\n");
                exit(0);
                break;
            default:
                printf("输入有误,请重新选择功能。\n");
                break;
        }
    }

    return 0;
}

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

#define MAX_TEACHERS 100

typedef struct {
    char id[10]; // 教师号
    char name[20]; // 姓名
    char gender[10]; // 性别
    char unit[50]; // 单位名称
    char address[50]; // 家庭住址
    char phone[20]; // 联系电话
    double salary; // 基本工资
    double allowance; // 津贴
    double subsidy; // 生活补贴
    double pay; // 应发工资
    double phone_bill; // 电话费
    double utility_bill; // 水电费
    double rent; // 房租
    double tax; // 所得税
    double health_insurance; // 卫生费
    double fund; // 公积金
    double deduction; // 合计扣款
    double net_pay; // 实发工资
} Teacher;

int num_teachers = 0; // 已经输入的教师数量
Teacher teachers[MAX_TEACHERS]; // 教师数组

// 根据教师号查找教师在数组中的位置,找不到返回-1
int find_teacher(char *id) {
    int i;
    for (i = 0; i < num_teachers; i++) {
        if (strcmp(teachers[i].id, id) == 0) {
            return i;
        }
    }
    return -1;
}

// 输入一个教师的信息
void input_teacher(Teacher *t) {
    printf("请输入教师编号:");
    scanf("%s", t->id);
    printf("请输入姓名:");
    scanf("%s", t->name);
    printf("请输入性别:");
    scanf("%s", t->gender);
    printf("请输入单位名称:");
    scanf("%s", t->unit);
    printf("请输入家庭住址:");
    scanf("%s", t->address);
    printf("请输入联系电话:");
    scanf("%s", t->phone);
    printf("请输入基本工资:");
    scanf("%lf", &t->salary);
    printf("请输入津贴:");
    scanf("%lf", &t->allowance);
    printf("请输入生活补贴:");
    scanf("%lf", &t->subsidy);
}

// 插入(修改)教师信息
void modify_teacher() {
    char id[10];
    int pos = -1;

    printf("请输入要修改的教师编号:");
    scanf("%s", id);
    pos = find_teacher(id);

    if (pos == -1) {
        printf("没有找到教师编号为%s的信息。\n", id);
    } else {
        Teacher *t = &teachers[pos];
        printf("当前信息如下:\n");
        printf("教师编号:%s", t->id);
        printf("姓名:%s", t->name);
        printf("性别:%s", t->gender);
        printf("单位名称:%s", t->unit);
        printf("家庭住址:%s", t->address);
        printf("联系电话:%s", t->phone);
        printf("基本工资:%.2lf", t->salary);
        printf("津贴:%.2lf", t->allowance);
        printf("生活补贴:%.2lf", t->subsidy);

        input_teacher(t);

        // 计算应发工资、合计扣款、实发工资
        t->pay = t->salary + t->allowance + t->subsidy;
        printf("请输入电话费:");
        scanf("%lf", &t->phone_bill);
        printf("请输入水电费:");
        scanf("%lf", &t->utility_bill);
        printf("请输入房租:");
        scanf("%lf", &t->rent);
        printf("请输入所得税:");
        scanf("%lf", &t->tax);
        printf("请输入卫生费:");
        scanf("%lf", &t->health_insurance);
        printf("请输入公积金:");
        scanf("%lf", &t->fund);
        t->deduction = t->phone_bill + t->utility_bill + t->rent + t->tax + t->health_insurance + t->fund;
        t->net_pay = t->pay - t->deduction;

        printf("修改成功!\n");
    }
}

// 删除教师信息
void delete_teacher() {
    char id[10];
    int i, pos = -1;

    printf("请输入要删除的教师编号:");
    scanf("%s", id);

    pos = find_teacher(id);

    if (pos == -1) {
        printf("没有找到教师编号为%s的信息。\n", id);
    } else {
        Teacher *t = &teachers[pos];
        printf("确认要删除以下信息吗?\n");
        printf("教师编号:%s", t->id);
        printf("姓名:%s", t->name);
        printf("性别:%s", t->gender);
        printf("单位名称:%s", t->unit);
        printf("家庭住址:%s", t->address);
        printf("联系电话:%s", t->phone);
        printf("基本工资:%.2lf", t->salary);
        printf("津贴:%.2lf", t->allowance);
        printf("生活补贴:%.2lf", t->subsidy);
        printf("应发工资:%.2lf", t->pay);
        printf("电话费:%.2lf", t->phone_bill);
        printf("水电费:%.2lf", t->utility_bill);
        printf("房租:%.2lf", t->rent);
        printf("所得税:%.2lf", t->tax);
        printf("卫生费:%.2lf", t->health_insurance);
        printf("公积金:%.2lf", t->fund);
        printf("合计扣款:%.2lf", t->deduction);
        printf("实发工资:%.2lf", t->net_pay);
        printf("确认删除请按1,取消请按0:");
        scanf("%d", &i);
        if (i == 1) {
            printf("已删除教师编号为%s的信息。\n", id);
            for (i = pos; i < num_teachers - 1; i++) {
                teachers[i] = teachers[i+1];
            }
            num_teachers--;
        } else {
            printf("已取消删除。\n");
        }
    }
}// 浏览教师信息
void browse_teachers() {
    int i;
    if (num_teachers == 0) {
        printf("没有输入任何教师信息。\n");
    } else {
        printf("教师编号\t姓名\t性别\t单位名称\t家庭住址\t联系电话\t应发工资\t实发工资");
        for (i = 0; i < num_teachers; i++) {
            printf("%s\t%s\t%s\t%s\t%s\t%s\t%.2lf\t%.2lf",
                teachers[i].id, teachers[i].name, teachers[i].gender, teachers[i].unit,
                teachers[i].address, teachers[i].phone, teachers[i].pay, teachers[i].net_pay);
        }
    }
}

// 按教师号录入教师基本数据
void input_teacher_data() {
    char id[10];
    int pos = -1;

    printf("请输入要输入基本数据的教师编号:");
    scanf("%s", id);

    pos = find_teacher(id);

    if (pos == -1) {
        printf("没有找到教师编号为%s的信息。\n", id);
    } else {
        Teacher *t = &teachers[pos];
        printf("请输入电话费:");
        printf("(如无,则输入0)");
        scanf("%lf", &t->phone_bill);
        printf("请输入水电费:");
        printf("(如无,则输入0)");
        scanf("%lf", &t->utility_bill);
        printf("请输入房租:");
        printf("(如无,则输入0)");
        scanf("%lf", &t->rent);
        printf("请输入所得税:");
        printf("(如无,则输入0)");
        scanf("%lf", &t->tax);
        printf("请输入卫生费:");
        printf("(如无,则输入0)");
        scanf("%lf", &t->health_insurance);
        printf("请输入公积金:");
        printf("(如无,则输入0)");
        scanf("%lf", &t->fund);
        t->deduction = t->phone_bill + t->utility_bill + t->rent + t->tax + t->health_insurance + t->fund; // 合计扣款
        t->net_pay = t->pay - t->deduction; // 实发工资

        printf("已成功输入教师编号为%s的基本数据。\n", id);
    }
}

// 主函数
int main() {
    int choice;

    while (1) {
        printf("请选择功能:\n");
        printf("1.输入一个教师的信息");
        printf("2. 插入(修改)教师信息");
        printf("3. 删除教师信息");
        printf("4. 浏览教师信息");
        printf("5. 输入教师基本数据");
        printf("0. 退出");
        printf("请选择:");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                if (num_teachers>=MAX_TEACHERS) {
                    printf("最多只能输入个教师的信息!\n",MAX_TEACHERS);
                } else {
                    input_teacher(&teachers[num_teachers]);
                    num_teachers++;
                }
                break;
            case 2:
                modify_teacher();
                break;
            case 3:
                delete_teacher();
                break;
            case 4:
                browse_teachers();
                break;
            case 5:
                input_teacher_data();
                break;
            case 0:
                printf("欢迎再次使用教师工资管理系统,再见!\n");
                exit(0);
                break;
            default:
                printf("输入有误,请重新选择功能。\n");
                break;
        }
    }

    return 0;
}