读书人

大神!C语言初学者有关问题!

发布时间: 2012-02-12 17:16:33 作者: rapoo

求助大神!!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; }//区别自己看看吧 有米有问题就不晓得了 我的测试是没有问题的 

读书人网 >C++

热点推荐