我想写一个记录工资单的程序来学习结构,但我发现结构令人困惑,我知道它们创建了一个数据类型,你会使用 -> 或。定义它,但我收到了一个错误。 2 个问题,
- 有什么问题?
- 程序要我添加保存多达 100 万条记录的功能,我假设这是通过具有 EMPLOYEE 结构类型的数组完成的?我会像发送任何其他数组一样将我的 EMPLOYEE 记录变量发送到 EMPLOYEE 数组吗?
我知道“jude.name”是问题区域,但不确定原因。
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000000
typedef struct{
int day;
int month;
int year;
}DATE;
typedef struct Employee{
char *name[100];
int *age;
float *hrsWorked;
float *regPay;
float *otPay;
float *totalPay;
DATE payDate;
}EMPLOYEE;
void recordManager();
int main(){
DATE today;
DATE tp;
EMPLOYEE jude;
EMPLOYEE jp;
jude.name = "jude";
system("pause");
return 0;
}
最佳答案
语句的问题...
jude.name = "jude";
... 是 jude.name
解析为一个数组(包含 100 个指向 char
的指针)。您可以在声明中初始化数组——这可能看起来像赋值——并且您可以分配给数组元素,但不能分配给整个数组。 p>
至于保存一百万条记录,如果它们必须同时全部存在于内存中(而不是其中一些存在于文件中),那么结构
数组是一种可能的选择:
EMPLOYEE employees[1000000];
unsigned employee_count = 0;
您可以像分配任何其他类型一样分配给struct
;结果与将右侧 struct
的每个字段分配给左侧 struct
的相应字段相同。例如:
EMPLOYEE one_employee;
/* ... initialize one_employee ... */
employees[employee_count++] = one_employee;
数组是否是一种合理的数据结构,以及这种分配方式是否适合您的目的,取决于您的程序应该对记录做什么。
还要注意,您可能不希望您的结构成员是指针,name
可能除外(在这种情况下,您肯定只需要一个指针,而不是它们的数组):
typedef struct Employee{
char name[100];
int age;
float hrsWorked;
float regPay;
float otPay;
float totalPay;
DATE payDate;
} EMPLOYEE;
关于c - 结构给我 "expression must be modifiable value",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29079684/