更新多个没有数组的结构成员

时间:2018-11-18 01:05:39

标签: c struct

我正在开发一个程序,其描述如下:

编写一个适当的C程序,该程序使用一个函数来接受用户输入并更新结构的成员。该结构应包含三个成员:姓氏,性别和年龄。姓氏不能超过30个字符。程序和功能应具有足够的灵活性,以具有任意数量的结构成员。

应在main函数中创建结构实例。应该为每个实例调用该函数以填充实例成员。成员的分配值应显示在主功能中。

输入和输出应可用于任何数量的实例。但是,出于测试目的,请针对两个结构实例进行这项工作。

不创建任何数组。应该简化主程序和函数(最少数量的变量,避免使用临时变量)

我不能使用数组,因此我使用了以下代码选项。有更有效的方法吗?

#include <stdio.h>
#include<string.h>

struct member {
    char lastName[30];
    char gender;
    int age;
};

void populateStruct(struct member person);

// begin main function
int main(void){

    int i=0;
    struct member person1={0};
    struct member person2={0};

    populateStruct(person1);
    populateStruct(person2);

    return 0;
} // end main


// function prototypes
void populateStruct(struct member person){

    printf("\nEnter last name: ");
    scanf(" %s", &person.lastName); 
    printf("\nEnter gender: ");
    scanf(" %c", &person.gender);
    printf("\nEnter age: ");
    scanf(" %d", &person.age);

    printf("The information you entered is:\n"); 
    printf("\n"); 
    printf(" %s ", person.lastName);
    printf(" %c ", person.gender);
    printf(" %d ", person.age);
    printf("\n");

}

1 个答案:

答案 0 :(得分:1)

这不是在main函数中作为要求状态进行打印的信息。但是,在执行此操作之前,需要将 pointer 传递给函数的结构。现在,您将结构的副本传递给函数,因此在main中看不到对函数所做的更改。

通过传递指针,调用函数可以取消引用以更改main中的对象。

void populateStruct(struct member *person);

int main(void){

    int i=0;
    struct member person1={0};
    struct member person2={0};

    populateStruct(&person1);
    populateStruct(&person2);

    printf("The information you entered is:\n"); 
    printf("\n"); 
    printf(" %s ", person1.lastName);
    printf(" %c ", person1.gender);
    printf(" %d ", person1.age);
    printf("\n");
    printf("\n"); 
    printf(" %s ", person2.lastName);
    printf(" %c ", person2.gender);
    printf(" %d ", person2.age);
    printf("\n");


    return 0;
} // end main


// function prototypes
void populateStruct(struct member *person){

    printf("\nEnter last name: ");
    scanf(" %29s", person->lastName); 
    printf("\nEnter gender: ");
    scanf(" %c", &person->gender);
    printf("\nEnter age: ");
    scanf(" %d", &person->age);

}