C语言结构体和函数指针:优化示例代码
// Person.h #define MAXNAMELEN 20
typedef struct _Person{ char name[MAXNAMELEN]; int age; void (printMe)(const struct _Person); void (add)(struct _Person); } Person;
void PrintMe(const Person*); void Add(Person*);
Person initPerson();
// Person.c #include <stdio.h> #include <string.h> #include "Person.h"
void PrintMe(const Person* person) { printf("%s, %d\n", person->name, person->age); }
void Add(Person* person) { char tempName[MAXNAMELEN]; int tempAge;
printf("Please input name (1-19 characters): ");
fgets(tempName, MAXNAMELEN, stdin);
tempName[strcspn(tempName, "\n")] = '\0'; // 去掉换行符
do {
printf("Please input age (1-99 integer): ");
scanf("%d", &tempAge);
getchar(); // 读取并丢弃换行符
} while (tempAge < 1 || tempAge > 99);
strcpy(person->name, tempName);
person->age = tempAge;
}
Person initPerson() { Person person; person.printMe = PrintMe; person.add = Add; return person; }
// main.c #include <stdio.h> #include "Person.h"
int main() { Person person = initPerson();
person.add(&person);
person.printMe(&person);
return 0;
}
原文地址: http://www.cveoy.top/t/topic/p8L0 著作权归作者所有。请勿转载和采集!