鱼C论坛

 找回密码
 立即注册
查看: 987|回复: 5

[已解决]C语言数据结构共用体的一道作业题

[复制链接]
发表于 2019-2-1 16:14:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

#include<stdio.h>

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

struct  person person[2];                //预设一名老师一名学生

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

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

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

请输入学号或学工号: 101

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

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

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

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

      101  M

      0  dgsd   F NULL

      Process exited after 25.93 seconds with return ualue 0请按任意键继续。
最佳答案
2019-2-1 18:13:16
scanf 接到完值后,最后还有一个 \n, 下次scanf 遇到\n(出错)则会跳过

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

清除键盘缓冲区数据
while (getchar()!='\n') continue;
    printf("请输入学号或学工号:");
                scanf("%d",&person[i].num);

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

使用道具 举报

发表于 2019-2-1 18:13:16 | 显示全部楼层    本楼为最佳答案   
scanf 接到完值后,最后还有一个 \n, 下次scanf 遇到\n(出错)则会跳过

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

清除键盘缓冲区数据
while (getchar()!='\n') continue;
    printf("请输入学号或学工号:");
                scanf("%d",&person[i].num);

                                while (getchar()!='\n') continue;
                
                printf("请输入姓名:");                //问题大概出现在这里 我有点搞不清gets和scanf的区别了 我发不了图 发不了运行图我把它复制在了下面~
                gets(person[i].name);
                
                printf("请输入性别(M/F):");
                scanf("%c",&person[i].sex);
                                while (getchar()!='\n') continue;
                 
                printf("请输入职业(S/T):");
                scanf("%c",&person[i].job);
                                while (getchar()!='\n') continue;
                
                if(person[i].job=='S')                //这样可以实现共用体的调用吗?
                {
                        printf("请输入班级:");
                        scanf("%d",&person[i].category.banji);
                } 
                else
                {
                        printf("请输入职位:");
                        scanf("%d",&person[i].category.position);
                }
                                while (getchar()!='\n') continue;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-1 19:36:38 | 显示全部楼层
ba21 发表于 2019-2-1 18:13
scanf 接到完值后,最后还有一个 \n, 下次scanf 遇到\n(出错)则会跳过

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

感谢大佬,虽然不是很懂,但是问题成功地解决了。。谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 20:45:43 | 显示全部楼层
82457097 发表于 2019-2-1 19:36
感谢大佬,虽然不是很懂,但是问题成功地解决了。。谢谢了

天哪!!我也在做这道题时遇到了类似的问题!!大佬可以和我说下是怎么回事吗??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-13 17:04:23 | 显示全部楼层
遇到同样的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-6 21:46:03 | 显示全部楼层
我也来   来论坛瞅瞅  果然有答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 23:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表