求助大神!!C语言,菜鸟问题!!
# include <stdio.h>
# include <malloc.h>
struct works
{
int num;
int salary;
int age;
char name[100];
};
int len;
struct works * info = NULL;
void input_works(void);
void taxis_works(void);
void demand_works(void);
int main(void)
{
int i;
for(; ;)
{
printf("\t\t *****************************************\n");
printf("\t\t * 欢迎使用XX公司工资管理系统 *\n");
printf("\t\t * 1.登记员工 2.排序 *\n");
printf("\t\t * 3.查询 4.退出 *\n");
printf("\t\t *****************************************\n");
printf("请你输入:");
scanf("%d",&i);
switch(i)
{
case 1:
input_works();
break;
case 2:
taxis_works();
break;
case 3:
demand_works();
break;
case 4:
printf("谢谢,XX公司工资管理系统\n");
return 0;
default:
continue;
}
}
free(info);
return 0;
}
void input_works(void)
{
int i;
printf("请输入共有几位员工:");
scanf("%d",&len);
info = (struct works *)malloc(len * sizeof(struct works));
for(i = 0; i < len; i++)
{
printf("第%d个员工的工号:", i+1);
scanf("%d",&(info[i].num));
printf("第%d个员工的工资:", i+1);
scanf("%d",&(info[i].salary));
printf("第%d个员工的年龄:", i+1);
scanf("%d",&(info[i].age));
printf("第%d个员工的姓名:", i+1);
scanf("%s",&(info[i].name));
}
printf("输入完成!\n");
return;
}
void taxis_works(void)
{
int i, j, k;
struct works t;
printf("\t\t *****************************************\n");
printf("\t\t * 1.按工资排序 2.按工龄排序 *\n");
printf("\t\t * 3.退出 *\n");
printf("\t\t *****************************************\n");
for(;;)
{
printf("请输入:");
scanf("%d",&k);
if(k == 1)
{
for (i=0; i<len-1; ++i)
for (j=0; j<len-1-i; ++j)
if (info[j].salary > info[j+1].salary) //>升序 <降序
{
t = info[j];
info[j] = info[j+1];
info[j+1] = t;
}
break;
}
else if(k == 2)
{
for (i=0; i<len-1; ++i)
for (j=0; j<len-1-i; ++j)
if (info[j].age > info[j+1].age) //>升序 <降序
{
t = info[j];
info[j] = info[j+1];
info[j+1] = t;
}
break;
}
else if(k == 3)return;
else
{
printf("您的输入有误!请重新输入!\n");
continue;
}
}
if(k == 1)
for (i=0; i<len; ++i)
{
printf("工资第%d位的是:\n", i+1);
printf("工号 = %d\n", (info[i].num));
printf("姓名 = %s\n", (info[i].name));
printf("工龄 = %d\n", (info[i].salary));
printf("工资 = %d\n", (info[i].age));
}
else
for (i=0; i<len; ++i)
{
printf("工资第%d位的是:\n", i+1);
printf("工号 = %d\n", info[i].num);
printf("姓名 = %s\n", info[i].name);
printf("工资 = %d\n", info[i].salary);
printf("工龄 = %d\n", info[i].age);
}
return;
}
/* 就是下面这个函数出问题!!到底是为什么???*/
void demand_works(void)
{
int i, j, q = 0;
struct works * ch;
ch = info;
for(;;)
{
printf("\t\t *****************************************\n");
printf("\t\t * 1.按姓名查询 2.按工号查询 *\n");
printf("\t\t * 3.按工资查询 4.按工龄查询 *\n");
printf("\t\t * 5.继续 6.退出 *\n");
printf("\t\t *****************************************\n");
printf("请你输入:");
scanf("%d",&i);
switch(i)
{
case 1:
printf("请输入要查询的姓名:");
scanf("%s",ch->name);
for(j = 0; j < len; j++)
{
if((ch->name) == (info[j].name))
{
printf("工号 = %d\n", info[j].num);
printf("工资 = %d\n", info[j].salary);
printf("工龄 = %d\n", info[j].age);
}
else
printf("该员工不存在\n");
}
break;
case 2:
printf("请输入要查询的工号:");
scanf("%d",&ch->num);
for(j = 0; j < len; j++)
{
if((ch->num) == (info[j].num))
{
printf("姓名 = %s\n", info[j].name);
printf("工资 = %d\n", info[j].salary);
printf("工龄 = %d\n", info[j].age);
}
else
printf("该工号不存在!\n");
}
break;
case 3:
printf("请输入要查询的工资:");
scanf("%d",&ch->salary);
for(j = 0; j < len; j++)
{
if((ch->salary) == (info[j].salary))
{
printf("姓名 = %s\n", info[j].name);
printf("工号 = %d\n", info[j].num);
printf("工龄 = %d\n", info[j].age);
}
else
printf("该工资不存在!\n");
}
break;
case 4:
printf("请输入要查询的工龄:");
scanf("%d",&ch->age);
for(j = 0; j < len; j++)
{
if((ch->age) == (info[j].age))
{
printf("姓名 = %s\n", info[j].name);
printf("工号 = %d\n", info[j].num);
printf("工资 = %d\n", info[j].salary);
}
else if((ch->age) != (info[j].age))
printf("该工龄不存在!\n");
}
break;
case 5:
continue;
case 6:
return;
default:
continue;
}
}
return;
}
就是void demand_works(void)这个函数出问题!!到底是为什么???
要怎么修改呢??求助大神!!
[解决办法]
- C/C++ code
# include <stdio.h># include <malloc.h># include <string.h>struct works{ int num; int salary; int age; char name[100];};int len=0;struct works * info = NULL;void input_works(void);void taxis_works(void);void demand_works(void);int main(void){ int i; for(; ;) { printf("\t\t *****************************************\n"); printf("\t\t * 欢迎使用XX公司工资管理系统 *\n"); printf("\t\t * 1.登记员工 2.排序 *\n"); printf("\t\t * 3.查询 4.退出 *\n"); printf("\t\t *****************************************\n"); printf("请你输入:"); scanf("%d",&i); switch(i) { case 1: input_works(); break; case 2: taxis_works(); break; case 3: demand_works(); break; case 4: printf("谢谢,XX公司工资管理系统\n"); return 0; default: continue; } } free(info); return 0; }void input_works(void){ int i; printf("请输入共有几位员工:"); scanf("%d",&len); info = (struct works *)malloc(len * sizeof(struct works)); for(i = 0; i < len; i++) { printf("第%d个员工的工号:", i+1); scanf("%d",&(info[i].num)); printf("第%d个员工的工资:", i+1); scanf("%d",&(info[i].salary)); printf("第%d个员工的年龄:", i+1); scanf("%d",&(info[i].age)); printf("第%d个员工的姓名:", i+1); scanf("%s",&(info[i].name)); } printf("输入完成!\n"); return;}void taxis_works(void){ int i, j, k; struct works t; printf("\t\t *****************************************\n"); printf("\t\t * 1.按工资排序 2.按工龄排序 *\n"); printf("\t\t * 3.退出 *\n"); printf("\t\t *****************************************\n"); for(;;) { printf("请输入:"); scanf("%d",&k); if(k == 1) { for (i=0; i<len-1; ++i) for (j=0; j<len-1-i; ++j) if (info[j].salary > info[j+1].salary) //>升序 <降序 { t = info[j]; info[j] = info[j+1]; info[j+1] = t; } break; } else if(k == 2) { for (i=0; i<len-1; ++i) for (j=0; j<len-1-i; ++j) if (info[j].age > info[j+1].age) //>升序 <降序 { t = info[j]; info[j] = info[j+1]; info[j+1] = t; } break; } else if(k == 3) return; else { printf("您的输入有误!请重新输入!\n"); continue; } } if(k == 1) for (i=0; i<len; ++i) { printf("工资第%d位的是:\n", i+1); printf("工号 = %d\n", (info[i].num)); printf("姓名 = %s\n", (info[i].name)); printf("工龄 = %d\n", (info[i].salary)); printf("工资 = %d\n", (info[i].age)); } else for (i=0; i<len; ++i) { printf("工资第%d位的是:\n", i+1); printf("工号 = %d\n", info[i].num); printf("姓名 = %s\n", info[i].name); printf("工资 = %d\n", info[i].salary); printf("工龄 = %d\n", info[i].age); } return; }/* 就是下面这个函数出问题!!到底是为什么???*/void demand_works(void){ int i, j, q = 0; struct works *ch = ( struct works * )malloc(sizeof(works)); bool flag = false; for(;;) { printf("\t\t *****************************************\n"); printf("\t\t * 1.按姓名查询 2.按工号查询 *\n"); printf("\t\t * 3.按工资查询 4.按工龄查询 *\n"); printf("\t\t * 5.继续 6.退出 *\n"); printf("\t\t *****************************************\n"); flag = false; printf("请你输入:"); scanf("%d",&i); fflush(stdin);//清除缓存 switch(i) { case 1: printf("请输入要查询的姓名:"); scanf("%s",ch->name); fflush(stdin);//清除缓存 for(j = 0; j < len; j++) { if( strcmp(ch->name, info[j].name) == 0 ) { printf("工号 = %d\n", info[j].num); printf("工资 = %d\n", info[j].salary); printf("工龄 = %d\n", info[j].age); flag = true; break; } } if( !flag ) { printf("该工号不存在!\n"); } break; case 2: printf("请输入要查询的工号:"); scanf("%d",&ch->num); fflush(stdin);//清除缓存 for(j = 0; j < len; j++) { if((ch->num) == (info[j].num)) { printf("姓名 = %s\n", info[j].name); printf("工资 = %d\n", info[j].salary); printf("工龄 = %d\n", info[j].age); flag = true; break; } } if( !flag ) { printf("该工号不存在!\n"); } break; case 3: printf("请输入要查询的工资:"); scanf("%d",&ch->salary); fflush(stdin);//清除缓存 for(j = 0; j < len; j++) { if((ch->salary) == (info[j].salary)) { printf("姓名 = %s\n", info[j].name); printf("工号 = %d\n", info[j].num); printf("工龄 = %d\n", info[j].age); flag = true; break; } } if( !flag ) { printf("该工号不存在!\n"); } break; case 4: printf("请输入要查询的工龄:"); scanf("%d",&ch->age); fflush(stdin);//清除缓存 for(j = 0; j < len; j++) { if((ch->age) == (info[j].age)) { printf("姓名 = %s\n", info[j].name); printf("工号 = %d\n", info[j].num); printf("工资 = %d\n", info[j].salary); flag = true; break; } } if( !flag ) { printf("该工号不存在!\n"); } break; case 5: continue; case 6: return; default: continue; } } return; }//区别自己看看吧 有米有问题就不晓得了 我的测试是没有问题的