C语言结构体、联合体、枚举类型使用

输入姓名、性别、根据输入的职务将往下的信息存入到联合体中。

#include<stdio.h>
#include<string.h> 
struct pessonst{
	char name[10];
	char sex[10];
	char job[10];
	union{			 //共用体 
		int clas;
		char positionTeachers[50];
	}category;
}person[2];
enum position{assistant=1,lecturer=2,associate_professor=3,professo=4,pNumber};
enum clas{one=1,two=2,three=3,four=4,cNumber};
enum sexs{man=1,woman=2,sNmuber};
int main(){
	int i;
	void InputEditStr(); 
	InputEditStr(); 
	
	printf("\n");
	printf("name   sex job class/position\n");
	for(i=0;i<2;i++){
		if(strcmp(person[i].job,"s")==0){
			printf("%-8s%-6s%-6s%-10d\n",person[i].name,person[i].sex,
			person[i].job,person[i].category.clas);
		}else{
			printf("%-8s%-6s%-6s%-10s\n",person[i].name,
			person[i].sex,person[i].job,person[i].category.positionTeachers);
		}
	} 
	
	return 0;
}

void InputEditStr(){
	struct pessonst *pes;
		pes=person;
		int i,numb,posit,inputSex;
		char *posiT=NULL;
	
		
		for(i=0;i<2;i++){//输入数据存入结构体 
			char inputSexStr[10],*dh;
			dh = inputSexStr;	
			printf("Enter name、sex、job、class/position%d:\n",i+1);
			
			scanf("%s%s%s",person[i].name,dh,person[i].job);
			if(strcmp(inputSexStr,"man")){ 
				inputSex=man;
				dh="男"; 
			}else if(strcmp(inputSexStr,"woman")){
				inputSex=woman;
				dh="女"; 
			}else{ 
				printf("Input error!\n");
				break; 
			} 
			strcpy(pes[i].sex,inputSexStr);
			
			
			if(strcmp(person[i].job,"s")==0){//判断类别  
				scanf("%d",&numb);
				if(numb>=1&&numb<cNumber){
					pes[i].category.clas=numb;
				}else{
					printf("Enter error!\n");
					break;
				}
				
			}else if(strcmp(person[i].job,"t")==0){
				scanf("%d",&posit); 
				if(posit>=1&&posit<pNumber){
					switch (posit) {
						case 1:
							posiT="assistant";
							break;
						case 2:
							posiT="lecturer";
							break;
						case 3:
							posiT="associate_professor";
							break;
						case 4:
							posiT="professo";
							break;
						default:
							break;
					}
				}
				strcpy(pes[i].category.positionTeachers,posiT);
			}else{
				printf("Inpput error!\n");
			}
		}
}

运行结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值