c语言 共用体的定义和输出

来源:百度知道 编辑:UC知道 时间:2024/07/08 12:23:18
#include<stdio.h>
struct stu
{
int num;
char name[10];
char sex;
char job;
union{
int clas;
char position[10];
}contain;
}person[2];

int main()
{
int i;
for(i=0;i<2;i++){
scanf("%d%s%c%c",&person[i].num,person[i].name,&person[i].sex,&person[i].job);
if(person[i].job=='s')scanf("%d",&person[i].contain.clas);
else if(person[i].job='t')scanf("%s",person[i].contain.position);}
for(i=0;i<2;i++){
printf("%d %s %c %c ",person[i].num,person[i].name,person[i].sex,person[i].job);
if(person[i].job=='s')printf("%d",person[i].contain.clas);
else if(person[i].job='t')printf("%s",person[i].contain.position);}
return 0;
}

//比如说输入两行数据
//num name sex job contain(clas or position)
//101 li f

#include<stdio.h>
int main(){
char c[50];
int i=0;
char ca,cb;
printf("第1次实验scanf(\"%%d%%s%%c%%c\",&i,c,&ca,&cb);\n");
scanf("%d%s%c%c",&i,c,&ca,&cb);
//是不会正确执行的
printf("i=%d\nc[50]=%s\nca=%c\ncb=%c\n",i,c,ca,cb);
printf("第2次实验scanf(\"%%d%%s\",&i,c);\n");
scanf("%d%s",&i,c);
printf("i=%d\nc[50]=%s\n",i,c);
}
scanf把空格作为分隔符
遇到空格那么一个输入结束
所以用scanf默认方式赋值的一个变量中的字符串中不会包含空格
但是连续的下一个char便会获得一个空格
所以
scanf("%d%s%c%c",&person[i].num,person[i].name,&person[i].sex,&person[i].job);
person[i].sex会是一个空格紧接着person[i].job不会获得正确的输入
解决这歌问题的办法就是用getchar自己解决
或者把%s放到最后 格式字符串改为"%d%c%c%s
并且还要对用户的输入作要求

scanf("%d%s%c%c", ....)改为scanf("%d %s %c %c", ....)
中间用空格隔开,相信你输入数据的时候也是打空格隔开每个数据的吧。scanf中也需要这样做。