我正在开发一个程序,其描述如下:
编写一个适当的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");
}
答案 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);
}