我正在开发一个工资单程序,它接受用户输入(名字/姓氏,工资和工作时间)并输出这些详细信息以及总额,税金和净额。
我有输入,calc总计,计算税和计算网络的单独模块;但我不确定如何实现数组存储,以便它包含来自每个模块的数据。
任何帮助将不胜感激
*编辑:我需要能够按员工按字母顺序对数据进行排序,所以我需要(我相信)是数组的记录。 我在主模块中初始化了记录,并希望记录读取如下内容:
lastName [1],firstName [1] payrate [1]小时[1]毛[1]税[1]净[1]
lastName [2],firstName [2] payrate [2]小时[2]毛[2]税[2]净[2]
我不知道如何将其他模块中的派生数据拉入此结构中。
答案 0 :(得分:4)
您可以创建一个全局结构来保存该数据。
struct payroll_info
{
char *fname;
char *lname;
...
};
然后,您可以使用qsort()
答案 1 :(得分:1)
除了 已提供的结构建议......,
您的问题还与文件间数据的可见性有关 (模块)。
这里 是一个great link,它将阐明如何在一个文件(通常是.h)中创建和定义结构等信息,为结构赋值成员并在另一个文件(可能是.c)中使用它们并修改第三个文件中的值。 (也可能是.c)。
结构阵列;在头文件中创建它将被任何将使用它的.c模块包含。它可能看起来像:
#define NUM_EMPL 10 //number of employees
typedef struct {
char last[40];
char first[40];
float payrate;
int hours;
float gross;
float tax;
float net;
} EMPLOYEE;
extern EMPLOYEE empl[NUM_EMPL], *pEmpl; //'extern' keyword is used only in this file
然后,在 所有 .c模块中,将使用此结构,位于文件顶部(即不在函数内),创建一个.h文件中定义的结构的新实例:
EMPLOYEE empl[NUM_EMPL], *pEmpl; //same as in .h file except without 'extern' keyword
然后,在函数中,您可以将结构的指针版本初始化为结构定义的开头,并使用值填充结构成员;
void func1(void)
{
Empl = &empl[0]; // '[0]' guarantees pointer location.
//finally assign values
//(can be put into loop or similar to assign all n employess)
strcpy(pEmpl[0].last, "Smith");
strcpy(pEmpl[0].first, "John");
pEmpl[0].payrate = 100.00;
pEmpl[0].hours = 40;
//and so on...
//pass pointer to struct to another function
func2(pEmpl);
}
或者,您收到一个指向结构的指针作为参数:
(以下函数可以位于不同的.c文件中,以更好地演示数据的文件间可见性。)
void func2(EMPLOYEE *e)
{
// assign values
//(can be put into loop or similar to assign all n employess)
strcpy(e[0].last, pEmpl[0].last);
strcpy(e[0].first, pEmpl[0].first);
e[0].payrate = pEmpl[0].payrate;
e[0].hours = pEmpl[0].hours;
//and so on...
}
答案 2 :(得分:0)
您应该使用结构来存储有关用户的所有数据。
类似的东西:
struct user
{
char *lastName;
char *firstName;
//other variables
}
答案 3 :(得分:0)
如果模块位于不同的二进制文件中,则
然后您可以使用extern
关键字共享数据,如下所示:
float paychecks[12]
中的单个位置声明数组。 extern float[] paycheks
你现在应该有一个数组副本 - 每个人都看到/指向同一个数组。