//
请对比以下两个程序段,认真分析其因
#include
<
stdio.h
>
#include
<
string
.h
>
struct
score
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
char job[10];
union
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
int classes;
char group[20];
}category;
}
person[
2
];
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
void
main()
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
int i;
for(i=0;i<2;i++)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
scanf("%s",person[i].job);//结构体变量person是数组,因此必须以%s作输入格式符,又因其成员job也是字符数组,所以输入项前不必加取地址运算符&
if(strcmp(person[i].job,"s")==0)
scanf("%d",&person[i].category.classes);
else if(strcmp(person[i].job,"t")==0)
scanf("%s",person[i].category.group);//结构体变量person是数组,因此必须以%s作输入格式符,又因其成员group又是共用体变量category中的字符数组,所以输入项前不必加取地址运算符&
else
printf("input error!");
}
for(i=0;i<2;i++)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if(strcmp(person[i].job,"s")==0)
printf("%d,",person[i].category.classes);
else
printf("%s",person[i].category.group);
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//
程序段二:
#include
<
stdio.h
>
#include
<
string
.h
>
struct
score
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
char job;
union
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
int classes;
char group[20];
}category;
}
person[
2
];
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
void
main()
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
int i;
for(i=0;i<2;i++)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
scanf("%s",&person[i].job);//因为结构体变量person是数组,所以必须用%s作格式符,又因为其成员仅是字符型变量而非数组,所以应该加上取地址运算符&.(注意:此语句并不茅盾)
if(person[i].job=='s')
scanf("%d",&person[i].category.classes);
else if(person[i].job=='t')
scanf("%s",person[i].category.group);//必须用%s作格式符,但不能加取地址运算符&.因为结构体变量person是数组,而其成员group是共用体category变量中的字符数组
else
printf("input error!");
}
for(i=0;i<2;i++)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
if(person[i].job=='s')
printf("%d,",person[i].category.classes);
else
printf("%s",person[i].category.group);
}
}
scanf("%s",&person[i].job);//如果person是数组,job是字符变量则此语句不茅盾,且输入时必须用%s作格式符,并要加上取地址运算符&
scanf("%s",person[i].job);//如果person和job都是数组,且job为字符数组,只输入是不需要取地址运算符&