You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

额外提示

  1. 函数声明与定义的匹配:函数声明时指定的返回类型、参数列表,必须和定义时完全一致,编译器才会识别这是同一个函数。
  2. 局部变量初始化:局部结构体变量的成员默认是随机值,所以第一次进入while循环时,Data.Emp_Salary可能刚好落在30000-70000区间内,导致跳过输入逻辑,提前初始化能避免这种问题。

内容的提问来源于stack exchange,提问作者Bas_Anar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 17:53:12