c语言课程设计,
c语言课程设计,改了一周了,还是有问题,错误显示teacher没定义,是不是我对指针的理解有问题来个大佬救救我吧,到底哪里出问题了:'(weeqw求详细解答
完整代码如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_TEACHERS 100
typedef struct {
char id; // 教师号
char name; // 姓名
char gender; // 性别
char unit; // 单位名称
char address; // 家庭住址
char phone; // 联系电话
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; // 教师数组
// 根据教师号查找教师在数组中的位置,找不到返回-1
int find_teacher(char *id) {
int i;
for (i = 0; i < num_teachers; i++) {
if (strcmp(teachers.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;
int pos = -1;
printf("请输入要修改的教师编号:");
scanf("%s", id);
pos = find_teacher(id);
if (pos == -1) {
printf("没有找到教师编号为%s的信息。\n", id);
} else {
Teacher *t = &teachers;
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;
int i, pos = -1;
printf("请输入要删除的教师编号:");
scanf("%s", id);
pos = find_teacher(id);
if (pos == -1) {
printf("没有找到教师编号为%s的信息。\n", id);
} else {
Teacher *t = &teachers;
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 = teachers;
}
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.id, teachers.name, teachers.gender, teachers.unit,
teachers.address, teachers.phone, teachers.pay, teachers.net_pay);
}
}
}
// 按教师号录入教师基本数据
void input_teacher_data() {
char id;
int pos = -1;
printf("请输入要输入基本数据的教师编号:");
scanf("%s", id);
pos = find_teacher(id);
if (pos == -1) {
printf("没有找到教师编号为%s的信息。\n", id);
} else {
Teacher *t = &teachers;
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;
Teacher t;
input_teacher(&t);
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;
} / workspace / CProject / c . c :232:31: error : unexpected type name ' Teacher ': expected expression
input _ teacher ( Teacher * t );
1 error generated .
错误代码是这个,我真的改不明白了{:1_937:}求助各位大佬 类型不一致传入和接收的类型不一致
本帖最后由 PEKING1 于 2023-5-30 18:51 编辑
建议把函数都抽出去分文件 joker52486 发表于 2023-5-30 17:26
/ workspace / CProject / c . c :232:31: error : unexpected type name ' Teacher ': expected expressio ...
这是因为在你调用 input_teacher() 函数时,传递了一个错误的参数。它期望一个指向 Teacher 类型的指针作为参数,但你却传递了一个数组 teachers。所以导致编译器中断,并报出这个错误消息。
为了正确地调用 input_teacher() 函数,并向其中传递正确的参数,你应该将其更改为以下代码形式:
input_teacher(&t); // 传递指向 t 的地址作为参数
这将会解决你当前的编译错误。
gpt回答的试试 PEKING1 发表于 2023-5-30 18:46
建议把函数都抽出去分文件
还是不行,错误显示是说我teacher没定义:'(weeqw qfxldhw 发表于 2023-5-30 18:54
这是因为在你调用 input_teacher() 函数时,传递了一个错误的参数。它期望一个指向 Teacher 类型的指针作 ...
这个方法可行,但是运行了以后不知道为啥数据不能临时存在终端{:1_923:} joker52486 发表于 2023-5-31 00:02
这个方法可行,但是运行了以后不知道为啥数据不能临时存在终端
这个错误是因为在main函数中调用input_teacher函数时,传递的参数应该是一个Teacher类型的变量,而不是Teacher类型的数组。修改代码如下:
将input_teacher函数改为接收一个Teacher类型的变量:
void input_teacher(Teacher *t) {
// 数据输入的代码不变
}
在main函数中创建一个Teacher类型的变量,将其传递给input_teacher函数:
Teacher t;
input_teacher(&t);
这样就可以避免上述错误了。这样呢 qfxldhw 发表于 2023-5-31 08:00
这个错误是因为在main函数中调用input_teacher函数时,传递的参数应该是一个Teacher类型的变量,而不是Te ...
改好了,谢谢啦 case 1:
input_teacher(&teachers);
++num_teachers;
break;
这样改就可以完美运行了:lol:victory:
页:
[1]