结构体与共用体的问题
本帖最后由 名字什么的随便 于 2020-8-9 11:33 编辑#include <stdio.h>
struct system
{
int number;
char name;
char sex;
char job;
union
{
char classroom;//学生
char position;//老师
}category;
}person;
void main()
{
int i;
for(i=0;i<2;i++)//输入
{
printf("请输入第%d名成员的号码:",i+1);
scanf("%d",&person.number);
printf("请输入第%d名成员的姓名:",i+1);
scanf("%s",person.name);
printf("请输入第%d名成员的性别(F/M):",i+1);//F is female,M is male
scanf("%c",&person.sex);
printf("请输入第%d名成员的职业(T/S):",i+1);//T is teacher,S is student
scanf("%c",&person.job);
if(person.job=='T')
{
printf("请输入第%d名成员的教务:",i+1);
scanf("%s",person.category.position);
}
if(person.job=='S')
{
printf("请输入第%d名成员的班级:",i+1);
scanf("%s",person.category.classroom);
}
}
for(i=0;i<2;i++)//输入
{
printf("Input info: ");
scanf("%d %s %c %c", &person.number, person.name, &(person.sex), &(person.job));
if(person.job == 'S'){//如果是学生
scanf("%s",person.category.classroom);
}else{//如果是老师
scanf("%s",person.category.position);
}
}
}
如果使用第一个for循环的输入方式时为什么会出现性别无法输入的情况,而第二个for循环则没有???编译器是visualc++6.0的。 https://fishc.com.cn/forum.php?mod=viewthread&tid=128631&extra=page%3D1%26filter%3Dtypeid%26typeid%3D441 本帖最后由 巴巴鲁 于 2020-8-9 12:10 编辑
输入完姓名后按回车才能输入性别,但是你按了回车,程序会认为你按的回车就是输入的性别
在27行前加入
getchar();// 缓冲输入的回车子符
因为用第二种方式程序会以为你输入的性别、职业全都属于 person[ i ].name 这个字符串。而且你第一种方式也有点问题,帮你改了改:
#include <stdio.h>
struct system
{
int number;
char name;
char sex;
char job;
union
{
char classroom;//学生
char position;//老师
}category;
}person;
int main()
{
int i;
for(i=0;i<2;i++)//输入
{
printf("请输入第%d名成员的号码:",i+1);
scanf("%d",&person.number);
printf("请输入第%d名成员的姓名:",i+1);
scanf("%s",person.name);
getchar(); // 过滤换行
printf("请输入第%d名成员的性别(F/M):",i+1);//F is female,M is male
scanf("%c",&person.sex);
getchar(); // 过滤换行
printf("请输入第%d名成员的职业(T/S):",i+1);//T is teacher,S is student
scanf("%c",&person.job);
if(person.job=='T')
{
printf("请输入第%d名成员的教务:",i+1);
scanf("%s",person.category.position);
}
if(person.job=='S')
{
printf("请输入第%d名成员的班级:",i+1);
scanf("%s",person.category.classroom);
}
}
return 0;
}
页:
[1]