【发布时间】:2015-10-16 20:32:26
【问题描述】:
我应该获取 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);
}
【问题讨论】:
-
您在每个函数中都有错误的
i循环计数器,请将3更改为4。还将scanf格式从"%0.2f"更改为"%f"。同样对于"%s"格式,删除&emp_rec[i].name前面的&。 -
Related: 如果
out_rec应该只包含工资超过 10000 的记录的副本,我建议您在制作副本时使用out_rec的单独索引(可以通过结构来完成作业,顺便说一句)。否则,您的out_rec数组中将有“洞”用于匹配不符合您条件的emp_rec索引。