将struct数组传递给输入函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将struct数组传递给输入函数相关的知识,希望对你有一定的参考价值。

我正在研究一种用C语言编写的程序,它为员工收集名称,费率和工时等数据。问题是我需要使用struct

我试图将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
");
        printf("1. Add Employee
");
        printf("2. Edit Employee
");
        printf("3. Print Employee
");
        Printf("4. Print All Employees
");
        printf("5. Quit");
        scanf_s("%d", &x);

        switch (x) 
        {
        case 1: load(guys[i]);
            break;


        default: printf("Please enter valid option.

");
            break;
        }
    }


    system("pause");
    return 0;

}

void load(struct Employee *guys)
{
    puts("
type name:
");
    scanf_s("%s", &guys[i]->name, 20);

    puts("
type hourly rate:
");
    scanf_s("%f", &guys[i]->rate);

    puts("
type hours worked:
");
    scanf_s("%f", &guys[i]->hours);


    i++;
}
答案

随着

load(guys[i]);

在你的程序中,你将i数组的guysth元素按值传递给load()。因此,在load()中使用的实际上是一个副本更改,它不会影响main()中的原始值。

相反,你可以将指向ith元素的指针传递给load()

load(&guys[i]);

并使用->运算符访问struct中的变量。

void load(struct Employee *guys)
{
    puts("
type name:
");
    scanf_s("%s", guys->name, 20);

    puts("
type hourly rate:
");
    scanf_s("%f", guys->rate);

    puts("
type hours worked:
");
    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()将在结尾处自动打印 。所以,如果你认为合适,你可以取消

你有一个小错字。该

Printf("4. Print All Employees
");

本来应该的

printf("4. Print All Employees
");

以上是关于将struct数组传递给输入函数的主要内容,如果未能解决你的问题,请参考以下文章

将 STRUCT 的 ARRAY 传递给标准 BigQuery SQL 的用户定义函数

Swift - 将struct数组传递给另一个struct的init

使用Struct将String数组和索引传递给C中的线程

如何将字符串数组传递给C中的函数?

如何将分隔符数组传递给 Regex.Split 函数? [关闭]

从工作表将二维数组传递给 VBA/UDF 函数