【问题标题】:Function to print the members of each struct in an array of structs in C [duplicate]在C中打印结构数组中每个结构的成员的函数[重复]
【发布时间】:2019-03-03 22:07:29
【问题描述】:

我正在尝试用 C 语言编写一个函数,该函数将结构数组(包含员工信息的结构)作为参数并打印每个结构的每个成员。出于某种原因,我的代码没有产生任何输出。谁能告诉我哪里出错了?谢谢。

这里是:

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

typedef struct Employee
{
    int number;
    char name[20];
    char department[15];
    double salary;
}Employee;

void employeePrint(Employee arr[]);

main()
{
    Employee e1 = {101,"John Smith\0","Accounting\0",54926.25};
    Employee e2 = {102,"Jane Q. Public\0","Retail\0",54926.24};
    Employee e3 = {103,"George Washington\0","Tech\0",70417.76};

    Employee empArr[3] = {e1,e2,e3};
    employeePrint(empArr);
}

void employeePrint(Employee arr[])
{
    int i;
    for(i = 0; i < sizeof(arr)/sizeof(arr[0]); ++i)
    {
        printf("Number: %-4d\n",arr[i].number);
        printf("Name: %-6s\n",arr[i].name);
        printf("Department: %s\n",arr[i].department);
        printf("Salary: $%-2.2lf",arr[i].salary);
        printf("----------------");
    }
}

【问题讨论】:

  • 这肯定是许多其他问题的重复。它基本上是关于确定传递给函数的数组的大小,这不能用原始数组(指针)可靠地完成。您必须显式传递大小,并且可能单独传递(或使用定义包含大小的数组类型的结构类型)。
  • 好吧,我搜索了它,但我不知道它是否不同,因为结构在一个数组中。另外,如果这个函数可能没有大小参数,我也没有。我搜索了大约一个小时才找到这个,但我找不到,所以我问了这个问题。每次我在这个网站上提问时都会发生这种情况,这真的让我很紧张。
  • 别担心;找到重复项是一项艰巨的工作,即使对于那些已经工作了十年的人来说也是如此。我有很多常见的重复书签;我没有这个书签。我很快就找到了它,因为我对要使用的搜索词有一个精明的想法('[c] size array function',并按投票排序,而不是相关性——两者密切相关,但不相同),但我确实必须进行搜索,这就是为什么在注意到这是重复项和找到实际重复项之间有 17 个小时的原因。 (还有一些睡眠,我相信这叫做“生命”。)
  • 请注意,如果您愿意,您可以接受其中一个答案,这将有利于回答的人和您;你会得到 2 点代表和回答者 15。

标签: c arrays struct printf


【解决方案1】:

问题在这里:void employeePrint(Employee arr[])for(i = 0; i &lt; sizeof(arr)/sizeof(arr[0]); ++i)。当您将数组传递给这样的函数时,它会分解为指针。指针不再存储原始数组的大小,因此 sizeof(arr) 为您提供指针的长度,该长度小于您的结构,因此除法四舍五入为 0。要解决此问题,请将大小传递为另一个参数,或者使用某种标记来知道何时停止循环。

【讨论】:

    【解决方案2】:

    替换:

    void employeePrint(Employee arr[])
    

    与:

    void employeePrint(size_t len, Employee arr[len])
    

    然后在函数调用中传递数组的长度,它应该会产生您要查找的内容。

    【讨论】:

      猜你喜欢
      • 2013-06-19
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      相关资源
      最近更新 更多