gpt4 book ai didi

c - 将结构数组传递给函数作为输入

转载 作者:行者123 更新时间:2023-11-30 18:27:55 25 4
gpt4 key购买 nike

我正在开发一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com