一、如何判断联合体中存储的数据类型
1 #include <stdio.h> 2 3 /* 结构体 */ 4 typedef struct{ 5 short b;//1 2 3 判断联合体中存储的数据的类型 6 union { 7 int num; 8 char ch; 9 double d; 10 }u; 11 }INFO; 12 13 int main() 14 { 15 INFO info1,info2,info3; 16 info1.b = 1; 17 info1.u.num = 15; 18 info2.b = 2; 19 info2.u.ch = 'A'; 20 info3.b = 3; 21 info3.u.d = 0.001; 22 if(info1.b==1) 23 printf("%d ",info1.u.num); 24 if(info2.b==2) 25 printf("%c ",info2.u.ch); 26 if(info3.b==3) 27 printf("%f ",info3.u.d); 28 return 0; 29 }
二、结构体数组存储表达式数组,数组元素可以类型判断
1 #include <stdio.h> 2 3 /* 表达式结构体 */ 4 typedef struct { 5 short b;//判断类型 6 union { 7 int num; 8 char ch; 9 }u; 10 }EXPRESSION; 11 12 /* 判断是否是数字 */ 13 int isdigit(char ch){ 14 return ch>='0'&&ch<='9'; 15 } 16 17 int main() 18 { 19 /* 表达式字符串 */ 20 char s[] = "150+(2*3)-5"; 21 /* 表达式结构体数组 */ 22 EXPRESSION expression[20]; 23 /* 记录表达式 */ 24 static unsigned short count; 25 /* 计算数字sum */ 26 int sum = 0; 27 /* 字符串转表达式结构体数组 */ 28 for(int i=0; s[i]; ++i) 29 { 30 /* 1.数字累加 */ 31 if(isdigit(s[i])&&s[i+1]){ 32 sum = sum*10 + s[i]-'0'; 33 expression[count].b = 1; 34 continue; 35 } 36 expression[count++].u.num = sum; 37 sum = 0; 38 /* 2.非数字 */ 39 expression[count].b=2; 40 expression[count++].u.ch = s[i]; 41 } 42 /* 表达式结构体数组打印 */ 43 for(int j=0; j<count; ++j) 44 { 45 if(expression[j].b==1){//数组元素的数据类型判断 46 printf("%d",expression[j].u.num); 47 } 48 else if(expression[j].b==2){ 49 printf("%c",expression[j].u.ch); 50 } 51 } 52 return 0; 53 }