我正在开发一个 C 语言程序,该程序收集员工的数据,例如姓名、费率和工作时间。问题是我需要使用struct
。
我试图将结构数组传递到 load()
函数中,用户将在其中输入员工的姓名、工作时间和费率,但似乎我做错了。你能告诉我出了什么问题吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define size 3
int i = 0;
struct Employee
{
char name[20];
float rate;
float hours;
}employee;
void load(struct Employee *guys);
void printout();
void edit();
void realedit();
void print();
int main(void)
{
int x=0;
struct Employee guys[size];
while (x != 5)
{
printf("Main Menu\n");
printf("1. Add Employee\n");
printf("2. Edit Employee\n");
printf("3. Print Employee\n");
Printf("4. Print All Employees\n");
printf("5. Quit");
scanf_s("%d", &x);
switch (x)
{
case 1: load(guys[i]);
break;
default: printf("Please enter valid option.\n\n");
break;
}
}
system("pause");
return 0;
}
void load(struct Employee *guys)
{
puts("\ntype name:\n");
scanf_s("%s", &guys[i]->name, 20);
puts("\ntype hourly rate:\n");
scanf_s("%f", &guys[i]->rate);
puts("\ntype hours worked:\n");
scanf_s("%f", &guys[i]->hours);
i++;
}
最佳答案
随着
load(guys[i]);
在您的程序中,您将 guys
数组的第 i
个元素按值传递给 load()
。因此,load()
中使用的内容实际上是一个副本更改,不会影响 main()
中的原始值。
相反,您可以将指向第 i
个元素的指针传递给 load()
,例如
load(&guys[i]);
并使用->
运算符访问struct
内的变量。
void load(struct Employee *guys)
{
puts("\ntype name:\n");
scanf_s("%s", guys->name, 20);
puts("\ntype hourly rate:\n");
scanf_s("%f", guys->rate);
puts("\ntype hours worked:\n");
scanf_s("%f", guys->hours);
}
并且无需使用 [i]
进行索引,因为我们会逐一处理元素。
在
scanf_s("%s", &guys[i]->name, 20);
该函数需要数组的基地址。所以使用
scanf_s("%s", guys[i]->name, 20);
随着数组的名称衰减为指向数组第一个元素的指针。
至于您在
中使用system()
system("pause");
考虑阅读 Why should the system() function be avoided in C and C++? .
另外,请注意 puts()
会自动在末尾打印 \n
。因此,如果您认为合适,您可以取消 \n
。
你有一个小错字。
Printf("4. Print All Employees\n");
应该是
printf("4. Print All Employees\n");
关于c - 将结构数组传递给函数作为输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51577099/