书上是这样说的:“在用scanf()语句输入时要注意,凡为数组类型的成员,无论是结构体成员还是联合体成员,在该项前不能再加‘&’运算符。”
#include "stdio.h"
#include "string.h"
#define N 1
main()
{
struct body
{
char name[10];
int age;
char job[10];
union
{
int class;
char office[10];
}depa;
};
struct body body[N];
int i;
for(i=0;i<N;i++)
{
printf("Input name,age,job and department\n");
scanf("%s %d %s",body[i].name,&body[i].age,body[i].job); /*body[i].name,body[i].job为数组类型,有&就会提示语法错误*/
if(strcmp(body[i].job,"student")==0)
scanf("%d",&body[i].depa.class);
if(strcmp(body[i].job,"teacher")==0)
scanf("%s",&body[i].depa.office); /*body[i].depa.office同为数组类型,但有&没有&都不报错且运行正常*/
}
printf("name\tage\tjob\tdepaterment\n");
for(i=0;i<N;i++)
{
if(strcmp(body[i].job,"student")==0)
printf("%s\t%d\t%s\t%d\n",body[i].name,body[i].age,body[i].job,body[i].depa.class);
if(strcmp(body[i].job,"teacher")==0)
printf("%s\t%d\t%s\t%s\n",body[i].name,body[i].age,body[i].job,body[i].depa.office);
}
}
#include "stdio.h"
#include "string.h"
#define N 1
main()
{
struct body
{
char name[10];
int age;
char job[10];
union
{
int class;
char office[10];
}depa;
};
struct body body[N];
int i;
for(i=0;i<N;i++)
{
printf("Input name,age,job and department\n");
scanf("%s %d %s",body[i].name,&body[i].age,body[i].job); /*body[i].name,body[i].job为数组类型,有&就会提示语法错误*/
if(strcmp(body[i].job,"student")==0)
scanf("%d",&body[i].depa.class);
if(strcmp(body[i].job,"teacher")==0)
scanf("%s",&body[i].depa.office); /*body[i].depa.office同为数组类型,但有&没有&都不报错且运行正常*/
}
printf("name\tage\tjob\tdepaterment\n");
for(i=0;i<N;i++)
{
if(strcmp(body[i].job,"student")==0)
printf("%s\t%d\t%s\t%d\n",body[i].name,body[i].age,body[i].job,body[i].depa.class);
if(strcmp(body[i].job,"teacher")==0)
printf("%s\t%d\t%s\t%s\n",body[i].name,body[i].age,body[i].job,body[i].depa.office);
}
}