user-0 提问: C语言问题，好累啊找不出错

回复:
user: user-1
content: 所有问题均已排除，但是否能得到正确的预期结果，还有待运行检验 #include<stdio.h> #include<string.h> #include<stdlib.h> #define length 5  struct employee {     char employeeid[10];    //职工号     char name[10];            //姓名     char sex[10];            //性别     int age;                //年龄     float basesalary;        //基本工资     float postWage;            //岗位工资     float totalwages;        //总工资 }; typedef struct employee EMPLOYEE;  //1.显示菜单 void displayMenu() {     printf("\n++++++++++++++++++++++++++++++++++++++++++++++\n");     printf("+                职工工资管理系统              +\n");     printf("+                   1.输入信息                 +\n");     printf("+                   2.输出信息                 +\n");     printf("+                   3.查询信息                 +\n");     printf("+                   4.修改信息                 +\n");     printf("+                   5.排序                     +\n");     printf("+                    6.保存到文件               +\n");     printf("+                   7.从文件读                 +\n");     printf("+                   8.退出程序                 +\n");     printf("+                                              +\n");     printf("\n++++++++++++++++++++++++++++++++++++++++++++++\n"); }  //2.登陆函数，验证口令 int login(char password[]) {     int flag;     static char key[10]="123";     if(strcmp(password,key)==0)     {         flag=1;     }     else     {         flag=0;     }     return flag; }  void unique(EMPLOYEE *employee,int leng,char employeeid[]) {     int i=0;     printf("请输入职工的职工号(以0结束)：");     scanf("%s",employee[i].employeeid);     for(i=1; i<leng ;i++)     {         while(gets(employeeid)!=0)         {             strcpy((employee+i)->employeeid, employeeid);             if((employee+i-1)->employeeid==(employee+i)->employeeid)             {                 printf("已有该职工。请重新输入");                 gets(employeeid);                 continue;             }             break;         }     } }  //5.输入信息到结构体数组中 void inputInfo(EMPLOYEE *employee,int leng) {     int i;     printf("请输入职工信息：");     for(i=0; i<leng ;i++)     {         scanf("%s %s %d %f %f %f", (employee+i)->name, (employee+i)->sex, &(employee+i)->age,             &(employee+i)->basesalary, &(employee+i)->postWage, &(employee+i)->totalwages);     } }  //6.输出结构体数组中的数据 void outputInfo(EMPLOYEE *employee, int leng) {     printf("输出职工信息：");     for(int i=0; i<leng ;i++)     {         printf("%s %s %s %d %f %f %f", (employee+i)->employeeid, (employee+i)->name, (employee+i)->sex, (employee+i)->age,             (employee+i)->basesalary, (employee+i)->postWage, (employee+i)->totalwages);     } }  //7.按职工号查询结构体数组中的数据 void queryInfo(EMPLOYEE employee[], int leng, char employeeid[]) {     int flag=0;     printf("请输入需要查询的职工的职工号：");     gets(employeeid);     for(int i=0; i<=leng ;i++)     {         if(strcmp(employeeid, employee[i].employeeid)==0)         {             flag=1;             break;         }     }     if(flag=1)     {         printf("%s %s %s %d %f %f %f", employee[i].employeeid, employee[i].name, employee[i].sex, employee[i].age,             employee[i].basesalary, employee[i].postWage, employee[i].totalwages);     }     else     {         printf("not found.");     } }  //8.按总工资降序对结构体数组中的职工信息进行排序 void sortScore(EMPLOYEE employee[], int leng) {     int i, j;     EMPLOYEE temp;     for(i=0; i<leng ;i++)         for(j=0; j<leng-j ;j++)             if(employee[j].totalwages > employee[i+1].totalwages)             {                 temp=employee[j];                 employee[j]=employee[j+1];                 employee[j+1]=temp;             } } /* //9.保存结构体数组中的数据到文件 void writeToFile(EMPLOYEE employee[], int length) {}*/  //10.修改信息 void ModifyOne(EMPLOYEE *employee) {     int i;     printf("请输入需修改信息的职工的职工号：\n");     scanf("%d", &i);     printf("请继续输入修改后的信息:\n");     scanf("%s %s %d %f %f %f", (employee+i-1)->name, (employee+i-1)->sex, &(employee+i-1)->age,             &(employee+i-1)->basesalary, &(employee+i-1)->postWage, &(employee+i-1)->totalwages); }  //主程序 void main() {     int i, flag, chos;     char password[10];     char employeeid[10];     EMPLOYEE *employee;      for(i=0;i<=3;i++)     {         printf("请输入登录口令：");         gets(password);         flag=login(password);         if(flag==1)         {             printf("登录成功。");             displayMenu();                                //显示菜单             printf("请选择你需要使用的功能：");             scanf("%d", &chos);             switch(chos)             {                 case 1:unique(employee, length, employeeid);inputInfo(employee,length);break;                 case 2:outputInfo(employee, length);break;                 case 3:queryInfo(employee, length, employeeid);break;                 case 4:ModifyOne(employee);break;                 case 5:sortScore(employee, length);break;                 case 6:                 case 7:                 case 8:break;break;                 default:printf("输入错误。");             }          }         else if(flag==0)         {             printf("输入错误，请重新输入。");             if(i==3)             {                 printf("输入出错三次，退出系统。");                 break;             }             continue;         }     } }

user: user-1
content: void unique(EMPLOYEE *employee, int length, char employeeid[])中 length,与#define length 5中length同名

user: user-2
content: 偶遇到类似问题都是用 “每次用/*...*/注释掉不同部分再重新编译，直到定位到具体语法出错的位置。” 的方法解决的。

user: user-3
content: 引用 3 楼 paschen 的回复:另外：  void unique(EMPLOYEE *employee, int length, char employeeid[])   这里的length换一个名字吧，因为你已经在上面#define length 5  把length定义成宏的名字了 不只这里，所有以length作为形参的函数，都要把形参length换一下

user: user-4
content: 另外：  void unique(EMPLOYEE *employee, int length, char employeeid[])   这里的length换一个名字吧，因为你已经在上面#define length 5  把length定义成宏的名字了

user: user-4
content: void unique(EMPLOYEE *employee, int length, char employeeid[]) 函数中，  strcpy(employee+i)->employeeid, employeeid);   改成：  strcpy((employee+i)->employeeid, employeeid);

user: user-3
content: //4.验证输入职工的唯一性中的  strcpy(employee+i)->employeeid, employeeid); 少一个括号

user: user-5
content: 把错误拿去一搜就行，一般常见的问题都能找到答案。

user: user-3
content: 引用 6 楼 qq_33271984 的回复:好多这种类似的错误比如 warning C4013: 'outputInfo' undefined; assuming extern returning int 是怎么回事啊，还有 error 2143:syntax error:missing';'before'type'. 求大神详解，急需 第一个问题好理解，就是表面的意思。但是第二个问题就比较复杂了，能引起这个问题的直接原因有很多，但是归根结底和编译有关系，如果你知道你的代码在机器中是怎么编译的话，就很容易理解为什么提示缺少分号了。比如你代码中length的问题

user: user-6
content: 引用 6 楼 qq_33271984 的回复:好多这种类似的错误比如 warning C4013: 'outputInfo' undefined; assuming extern returning int 是怎么回事啊，还有 error 2143:syntax error:missing';'before'type'. 求大神详解，急需 第1句的意思是某个变量没定义, 则编译器默认它在外部文件中定义, 并默认是int型. 第2句的意思是少了分号

user: user-0
content: 好多这种类似的错误比如 warning C4013: 'outputInfo' undefined; assuming extern returning int 是怎么回事啊，还有 error 2143:syntax error:missing';'before'type'. 求大神详解，急需