c - 打印 C 中结构数组中每个结构成员的函数

标签 c arrays struct printf

<分区>

我正在尝试用 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("----------------");
    }
}

最佳答案

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

关于c - 打印 C 中结构数组中每个结构成员的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52546361/

相关文章:

arrays - Ruby - 如何切片数组并根据条件对其元素求和

c++ - 有没有办法在结构中存储日期和时间? C++

可以/不能返回结构的 C++ 方法

java - 如何创建包含 100 个随机整数的一维数组并求平均值、标准差和方差?

c - 如何在源代码级别自动展开源代码中的循环?

C 修改结构中的数组

c - 时间段错误(0);

javascript - 将 ids 作为数组添加到 onclick 函数的隐藏字段

c# - C#中的自定义行结构

c - keil uvision4 是否足以替代 8051 硬件