// 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录