C 正在更新不带数组的多个结构成员

C 正在更新不带数组的多个结构成员,c,struct,C,Struct,我正在编写一个程序,其描述如下: 编写一个适当的C程序,利用函数接受用户输入并更新结构的成员。该结构应包含三个成员:姓氏、性别和年龄。LastName将不超过30个字符。程序和功能应足够灵活,以适应任意数量的结构构件 应该在main函数中创建结构实例。应该为每个实例调用该函数以填充实例成员。成员的指定值应显示在主功能中 输入和输出应适用于任意数量的实例。但是,出于测试目的,请对两个结构实例执行此操作 不要创建任何数组。应简化主程序和功能(尽量减少变量数量,避免临时变量) 我不能使用数组,所以我选

我正在编写一个程序,其描述如下:

编写一个适当的C程序,利用函数接受用户输入并更新结构的成员。该结构应包含三个成员:姓氏、性别和年龄。LastName将不超过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");

}
#包括
#包括
结构成员{
char lastName[30];
性别;
智力年龄;
};
void populateStruct(结构成员人);
//开始主要功能
内部主(空){
int i=0;
结构成员person1={0};
结构成员person2={0};
大众结构(person1);
大众结构(person2);
返回0;
}//末端总管
//功能原型
void populateStruct(结构成员个人){
printf(“\n输入姓氏:”);
scanf(“%s”和person.lastName);
printf(“\n输入性别:”);
scanf(“%c”和person.gender);
printf(“\n输入年龄:”);
scanf(“%d”和人的年龄);
printf(“您输入的信息是:\n”);
printf(“\n”);
printf(“%s”,person.lastName);
printf(“%c”,个人性别);
printf(“%d”,个人年龄);
printf(“\n”);
}

这不是在
主功能中作为需求状态打印。但是,在执行此操作之前,需要将指向结构的指针传递给函数。现在,将结构的副本传递给函数,因此在函数中所做的更改在
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);

}
通过传递指针,调用函数可以取消引用该指针以更改
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);

}

你是否在课堂上讨论过malloc和动态分配?理想情况下,您希望创建一个足够大的内存块,以容纳两个struct,并且在填充完这两个struct后能够
realloc
。除了
scanf(“%s”、&person.lastName)中的类型错误外,您的代码还可以
populateStruct
不起作用的事实。另请参见:“成员的指定值应显示在主函数中。”您的意思必须是按值传递结构,以便函数接收结构的副本,并且当函数返回时,在函数中所做的任何修改都将丢失。也许在
main
中传递地址和接收指针的函数可能会有所帮助。亚瑟·格林(Arthur Green),而不是在答案到达后删除问题的重要部分,请查看。问题回滚。@chux你是对的,我很抱歉我得到了反对票,并且认为我的问题可能太长。谢谢,我正在试图找出如何让指针工作。->看起来很有趣,我现在要研究一下。