存储阵列中多个函数的数据

时间:2013-07-29 22:53:36

标签: c arrays function sorting

我正在开发一个工资单程序,它接受用户输入(名字/姓氏,工资和工作时间)并输出这些详细信息以及总额,税金和净额。

我有输入,calc总计,计算税和计算网络的单独模块;但我不确定如何实现数组存储,以便它包含来自每个模块的数据。

任何帮助将不胜感激

*编辑:我需要能够按员工按字母顺序对数据进行排序,所以我需要(我相信)是数组的记录。 我在主模块中初始化了记录,并希望记录读取如下内容:

  

lastName [1],firstName [1] payrate [1]小时[1]毛[1]税[1]净[1]

     

lastName [2],firstName [2] payrate [2]小时[2]毛[2]税[2]净[2]

我不知道如何将其他模块中的派生数据拉入此结构中。

4 个答案:

答案 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关键字共享数据,如下所示:

  1. 在代码float paychecks[12]中的单个位置声明数组。
  2. 为了从另一个文件访问数据,请在导入文件中声明它 extern float[] paycheks
  3. 在您希望使用薪水表阵列的每个文件中执行上述(2)。
  4. 你现在应该有一个数组副本 - 每个人都看到/指向同一个数组。