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请按任意键继续。
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; ba21 发表于 2019-2-1 18:13
scanf 接到完值后,最后还有一个 \n, 下次scanf 遇到\n(出错)则会跳过
scanf函数返回成功读入的数据项数 ...
感谢大佬,虽然不是很懂,但是问题成功地解决了。。谢谢了{:10_254:} 82457097 发表于 2019-2-1 19:36
感谢大佬,虽然不是很懂,但是问题成功地解决了。。谢谢了
天哪!!我也在做这道题时遇到了类似的问题!!大佬可以和我说下是怎么回事吗??{:10_266:} 遇到同样的问题 我也来 来论坛瞅瞅果然有答案
页:
[1]