解答:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct person{
int num;
char name[10];
char sex;
char job;
union {
int clas;
char position[10];
}category;
};
int main() {
int n;
scanf("%d", &n);
getchar();
person* person_array = (person*)malloc(sizeof(person));
int num;
char name[10];
char sex;
char job;
char detail[10];
int clas;
char position[10];
for(int i=0; i<=n-1; i++) {
char s[30];
gets(s);
sscanf(s, "%d %s %c %c %s", &num, name, &sex, &job, &detail);
(*(person_array+i)).num = num; //.的优先级比*高
strcpy((*(person_array+i)).name, name);
(*(person_array+i)).sex = sex;
(*(person_array+i)).job = job;
if(job=='s') {
sscanf(detail, "%d", &clas);
(*(person_array+i)).category.clas = clas;
printf("%d %s %c %c %d\n", (*(person_array+i)).num, (*(person_array+i)).name, (*(person_array+i)).sex, (*(person_array+i)).job, (*(person_array+i)).category.clas);
}
else if(job == 't') {
strcpy(position, detail);
strcpy((*(person_array+i)).category.position, position);
printf("%d %s %c %c %s\n", (*(person_array+i)).num, (*(person_array+i)).name, (*(person_array+i)).sex, (*(person_array+i)).job, (*(person_array+i)).category.position);
}
}
return 0;
}
总结:
- union的用法
- 题目中的class变量会引起冲突
- ""包括字符串,''包括字符
- 使用sscanf实现字符串转整型