82457097 发表于 2019-2-1 16:14:47

C语言数据结构共用体的一道作业题

这是我写的代码,编译没问题,运行有问题,用的是devc++编译器;
等级不够 贴不了图~~真心请教 没遇到过这种情况。。

#include<stdio.h>

struct person                //结构体
{
        int num;
        char name;
        char sex;
        char job;
        union                //共用体
        {
                int banji;
                char position;
        }category;
};

structperson person;                //预设一名老师一名学生

int main()
{
        int i;
        for(i=0;i<2;i++)
        {
                printf("请输入学号或学工号:");
                scanf("%d",&person.num);
               
                printf("请输入姓名:");                //问题大概出现在这里 我有点搞不清gets和scanf的区别了 我发不了图 发不了运行图我把它复制在了下面~
                gets(person.name);
               
                printf("请输入性别(M/F):");
                scanf("%c",&person.sex);
               
                printf("请输入职业(S/T):");
                scanf("%c",&person.job);
               
                if(person.job=='S')                //这样可以实现共用体的调用吗?
                {
                        printf("请输入班级:");
                        scanf("%d",&person.category.banji);
                }
                else
                {
                        printf("请输入职位:");
                        scanf("%d",&person.category.position);
                }
        }
        printf("\t学号/学工号\t姓名\t性别\t职业\t班级/职位\n");                //以表格形式输出录入数据 没仔细排版~
        for(i=0;i<2;i++)
        {
                if(person.job=='S')
                {
                        printf("\t%d\t%s\t%c\t%c\t%d\n",person.num,person.name,person.sex,person.job,person.category.banji);
                }
                else
                {
                        printf("\t%d\t%s\t%c\t%c\t%s\n",person.num,person.name,person.sex,person.job,person.category.position);
                }
        }
       
}

/*************************************************************************************************************/

运行情况~~头一回遇到这种情况~

请输入学号或学工号: 101

      请锁入姓名:请输入性别(M2F) : M                //这里姓名输入直接跳过了????

      请输入职业(S/T):请输入职位: dgsd                //职业输入业跳过了???

      请输入学号或学工号:请输人姓名:请输入性别(M/F) : F请输入职业(ST) :请输入职位5454                //到了第二次循环更离谱。。。

      学号/学工号姓名性别职业班级/职位                //输出情况。。。一塌糊涂。。

      101M

      0dgsd   F NULL

      Process exited after 25.93 seconds with return ualue 0请按任意键继续。

ba21 发表于 2019-2-1 18:13:16

scanf 接到完值后,最后还有一个 \n, 下次scanf 遇到\n(出错)则会跳过

scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF。

清除键盘缓冲区数据
while (getchar()!='\n') continue;

    printf("请输入学号或学工号:");
                scanf("%d",&person.num);

                                while (getchar()!='\n') continue;
               
                printf("请输入姓名:");                //问题大概出现在这里 我有点搞不清gets和scanf的区别了 我发不了图 发不了运行图我把它复制在了下面~
                gets(person.name);
               
                printf("请输入性别(M/F):");
                scanf("%c",&person.sex);
                                while (getchar()!='\n') continue;
               
                printf("请输入职业(S/T):");
                scanf("%c",&person.job);
                                while (getchar()!='\n') continue;
               
                if(person.job=='S')                //这样可以实现共用体的调用吗?
                {
                        printf("请输入班级:");
                        scanf("%d",&person.category.banji);
                }
                else
                {
                        printf("请输入职位:");
                        scanf("%d",&person.category.position);
                }
                                while (getchar()!='\n') continue;

82457097 发表于 2019-2-1 19:36:38

ba21 发表于 2019-2-1 18:13
scanf 接到完值后,最后还有一个 \n, 下次scanf 遇到\n(出错)则会跳过

scanf函数返回成功读入的数据项数 ...

感谢大佬,虽然不是很懂,但是问题成功地解决了。。谢谢了{:10_254:}

书包骨 发表于 2020-3-6 20:45:43

82457097 发表于 2019-2-1 19:36
感谢大佬,虽然不是很懂,但是问题成功地解决了。。谢谢了

天哪!!我也在做这道题时遇到了类似的问题!!大佬可以和我说下是怎么回事吗??{:10_266:}

华工小灰 发表于 2020-7-13 17:04:23

遇到同样的问题

ZhKQYu 发表于 2020-10-6 21:46:03

我也来   来论坛瞅瞅果然有答案
页: [1]
查看完整版本: C语言数据结构共用体的一道作业题