C语言编写员工薪资程序时遇编译错误:error: expected identifier or '(' before ')' token 咨询
解决你的C语言编译错误:expected identifier or '(' before ')' token
嘿,作为编程新手遇到这种编译错误太正常了,我来帮你拆解一下问题所在:
错误核心原因
你在定义Emp_Dat_Inp函数时,返回类型写错了!看你报错的第25行:
struct Emp_Dat_Inp() {
这里的struct Emp_Dat_Inp是一个不存在的结构体类型,编译器完全不知道它是什么。而实际上,这个函数的返回类型应该是你之前通过typedef定义的empdat(也就是struct Emp_Data的别名)——因为你声明这个函数的时候写的是struct Emp_Data Emp_Dat_Inp();,函数声明和定义的返回类型必须保持一致。
另外,我还发现一个潜在问题:你的struct Emp_Data里把int Emp_Salary;给注释掉了,后面代码里却在访问Data.Emp_Salary,这会导致后续编译或运行时出错,记得把这行注释去掉。
修正后的代码
我把错误的地方标出来并做了修正:
#include <stdio.h> typedef struct Emp_Data{ int Emp_Salary; // 取消注释,这个成员必须存在才能被后续代码访问 int leaves; int Ext_Sal; } empdat; // 函数声明没问题,和定义保持一致即可 struct Emp_Data Emp_Dat_Inp(); int main() { empdat Emp_1; Emp_1 = Emp_Dat_Inp(); /* Sal_Mod(); Tot_Sal(); */ } // 这里把返回类型改成empdat(或者用struct Emp_Data也可以,两者等价) empdat Emp_Dat_Inp() { empdat Data; // 初始化局部变量,避免第一次循环时出现随机值导致逻辑异常 Data.Emp_Salary = 0; while(Data.Emp_Salary > 70000 || Data.Emp_Salary < 30000 ) { printf("Please enter the employee salary:\n"); printf("(NOTE: it must be within 30000 and 70000)\n"); scanf("%d", &Data.Emp_Salary); } printf("Please enter the extra sales made:\n"); scanf("%d", &Data.Ext_Sal); printf("Finally please enter the number of leaves taken:\n"); scanf("%d", &Data.leaves); return Data; }
额外提示
- 函数声明与定义的匹配:函数声明时指定的返回类型、参数列表,必须和定义时完全一致,编译器才会识别这是同一个函数。
- 局部变量初始化:局部结构体变量的成员默认是随机值,所以第一次进入
while循环时,Data.Emp_Salary可能刚好落在30000-70000区间内,导致跳过输入逻辑,提前初始化能避免这种问题。
内容的提问来源于stack exchange,提问作者Bas_Anar
相关产品推荐
相关产品推荐

