C 正在更新不带数组的多个结构成员
我正在编写一个程序,其描述如下: 编写一个适当的C程序,利用函数接受用户输入并更新结构的成员。该结构应包含三个成员:姓氏、性别和年龄。LastName将不超过30个字符。程序和功能应足够灵活,以适应任意数量的结构构件 应该在main函数中创建结构实例。应该为每个实例调用该函数以填充实例成员。成员的指定值应显示在主功能中 输入和输出应适用于任意数量的实例。但是,出于测试目的,请对两个结构实例执行此操作 不要创建任何数组。应简化主程序和功能(尽量减少变量数量,避免临时变量) 我不能使用数组,所以我选择了下面的代码选项。有没有更有效的方法C 正在更新不带数组的多个结构成员,c,struct,C,Struct,我正在编写一个程序,其描述如下: 编写一个适当的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你是对的,我很抱歉我得到了反对票,并且认为我的问题可能太长。谢谢,我正在试图找出如何让指针工作。->看起来很有趣,我现在要研究一下。