名字什么的随便 发表于 2020-8-9 11:27:26

结构体与共用体的问题

本帖最后由 名字什么的随便 于 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的。

zltzlt 发表于 2020-8-9 11:27:50

https://fishc.com.cn/forum.php?mod=viewthread&tid=128631&extra=page%3D1%26filter%3Dtypeid%26typeid%3D441

巴巴鲁 发表于 2020-8-9 12:09:10

本帖最后由 巴巴鲁 于 2020-8-9 12:10 编辑

输入完姓名后按回车才能输入性别,但是你按了回车,程序会认为你按的回车就是输入的性别
在27行前加入
getchar();// 缓冲输入的回车子符

zltzlt 发表于 2020-8-9 12:10:43

因为用第二种方式程序会以为你输入的性别、职业全都属于 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]
查看完整版本: 结构体与共用体的问题