c中的结构用于存储员工的详细信息并打印超过10000的员工

时间:2015-07-26 17:22:41

标签: c structure

我应该获得4名员工的详细信息,并打印出薪水超过10000的人的详细信息。我不应该改变该计划的结构。当我编译这段代码时,我没有得到任何错误,但输出只是

0  0.00
0  0.00
0  0.00

我无法找到我在做错的地方。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct employee
{ int id;
    char name[10];
    float sal;
} EMP;

void init_emp_rec(EMP out_rec[]);
void print_emp_rec(EMP out_rec[]);

void emp_recordMain(EMP emp_rec[], EMP out_rec[])
{
    for(int i=0; i<3; i++)
    {
        if(emp_rec[i].sal>10000)
        {
            out_rec[i].id=emp_rec[i].id;
            strcpy(out_rec[i].name,emp_rec[i].name);
            out_rec[i].sal=emp_rec[i].sal;
        }
    }        
}

void init_emp_rec(EMP out_rec[])
{
    memset(out_rec, 0, sizeof(EMP)*4);
}

void print_emp_rec(EMP out_rec[])
{   
    for(int i=0; i<3; i++)    
    {
        printf("%d %s %.2f", out_rec[i].id, out_rec[i].name, out_rec[i].sal);
        if(i!=2){printf("\n");}
    }
}

main(int argc, const char** argv)
{
    int i;
    EMP emp_rec[4];
    EMP out_rec[4];
    init_emp_rec(out_rec);
    init_emp_rec(emp_rec);
    for(int i=0; i<4; i++)
    {
        scanf("%d",&emp_rec[i].id);
        scanf("%s",&emp_rec[i].name);
        scanf("%0.2f",&emp_rec[i].sal);
    }    
    emp_recordMain(emp_rec, out_rec);
    print_emp_rec(out_rec);
}

2 个答案:

答案 0 :(得分:1)

看起来您需要稍微更改一下代码:

scanf("%f",&emp_rec[i].sal);

&#34;%0.2F&#34;将20000视为0。

答案 1 :(得分:0)

rec[i].name已经是字符串的地址,因此您应该使用:

  scanf("%s",emp_rec[i].name);

另外,在读取float时不应使用格式说明符(“0.2”):

  scanf("%f",&emp_rec[i].sal);

我觉得还有其他事情需要解决,但我不想破坏你的运动: - )