鱼C论坛

 找回密码
 立即注册
查看: 1842|回复: 6

共用体问题

[复制链接]
发表于 2014-1-23 22:22:02 | 显示全部楼层 |阅读模式
5鱼币
#include<stdio.h>
struct
{
        int num;
        char name[10];
        char sex;
        char job;
        union
        {
                int banji;
                char position[10];
        }category;
}preson[2];
void main()
{
        int i;
        for(i=0;i<2;i++)
        {
                printf("input num\n");
                scanf("%d",&preson[i].num);
                printf("input name\n");
                scanf("%s",preson[i].name);
                printf("input sxe M/F\n");
                scanf("%c",&preson[i].sex);
                printf("input S/T,job\n");
                scanf("%c",&preson[i].job);
                if(preson[i].job=='S')
                {
                        printf("input class\n");
                        scanf("%d",&preson[i].category.banji);
                }
                if(preson[i].job=='T')
                {
                        printf("input zhiwu\n");
                        scanf("%s",&preson[i].category.position);
                }
                else
                {
                        printf("error!!\n");
                }
        }

         printf("No.    name    sex job class/position\n");
          for( i=0; i < 2; i++ )
      {
            if( preson[i].job == 'S')
            {
                  printf("%-6d%-10s%-3c%-3c%10d\n", preson[i].num, 
                        preson[i].name, preson[i].sex, preson[i].job, 
                        preson[i].category.banji);
            }
            else
            {
                  printf("%-6d%-10s%-3c%-3c%10s\n", preson[i].num, 
                        preson[i].name, preson[i].sex, preson[i].job, 
                        preson[i].category.position);
            }
      }
}
运行没报错,  貌似 逻辑也没错误,  就是 运行结果  不知道为什么会错, VC++6.0

最佳答案

查看完整内容

第一个问题:scanf("%c",&preson.sex);这句和scanf("%c",&preson.job);这句。在C语言中,当输入字符时,会把你前面的那个回车当最字符,所以你读取的是回车,不是字符,可以有多种解决办法,一种在输入前面加个getchar();吃掉回车符;一种是用getche函数,还有其他的我就不介绍了。 第二个问题:你的if(preson.job=='S')和if(preson.job=='T')和else这3句句有个逻辑错误,如果你输入的是s无论如何都会error,好好看下问题所在 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-23 22:22:03 | 显示全部楼层
第一个问题:scanf("%c",&preson[i].sex);这句和scanf("%c",&preson[i].job);这句。在C语言中,当输入字符时,会把你前面的那个回车当最字符,所以你读取的是回车,不是字符,可以有多种解决办法,一种在输入前面加个getchar();吃掉回车符;一种是用getche函数,还有其他的我就不介绍了。
第二个问题:你的if(preson[i].job=='S')和if(preson[i].job=='T')和else这3句句有个逻辑错误,如果你输入的是s无论如何都会error,好好看下问题所在。是不是该改为else if。
最后给你一句话,不怕错误,就怕没错误。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-24 11:13:50 | 显示全部楼层
拿编译器自己一步步调试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-24 11:44:24 | 显示全部楼层
楼主啊 谁喜欢帮你一句一句找错误啊 建议你 写上尽可能详细的注释 你的整体思路 和出现什么错误
不要只说有错误然后 给出一堆代码就完了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-1-24 12:25:54 | 显示全部楼层

谢谢了,  我 了解了 回了,,    新年快乐{:{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-1 23:43:51 | 显示全部楼层
支持小甲鱼,赞点鱼币回来下载
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-12-18 20:43:05 | 显示全部楼层
在纠结楼主这问题好久也没弄出来。求楼主贴出完整能运行的代码~谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-11 22:10:57 | 显示全部楼层
QQ截图20150411221135.png

#include<stdio.h>

struct
{
        int num;
        char name[10];
        char sex[10];
        char job[10];
        union
        {
                int banji;
                char position[10];
        }category;
       
}person[2];

void main()
{
        int i;
        char *a[2]={"student","teacher"};
        for(i=0;i<2;i++)
        {       
                printf("请输入号码: ");
                scanf("%d",&person[i].num);
                printf("请输入姓名: ");
                scanf("%s",&person[i].name);
                printf("请输入性别 male or female:\t");
                scanf("%s",&person[i].sex);
CIN:        printf("请输入职业 teacher or student:\t");
                scanf("%s",&person[i].job);

                if(*(person[i].job) == *a[0])
                {
                        printf("请输入班级: ");
                        scanf("%d",&person[i].category.banji);
                }
                else if(*(person[i].job) == *a[1])
                {
                        printf("请输入职务: ");
                        scanf("%s",&person[i].category.position);
                }
                else
                {
                        printf("输入错误\n");
                        goto CIN;
                }
        }
        printf("\n\n");

        for(i=0;i<2;i++)
        {
                if(*(person[i].job) == *a[0])
                {
                        printf("号码\t:%d\n",person[i].num);
                        printf("姓名\t:%s\n",person[i].name);
                        printf("性别\t:%s\n",person[i].sex);
                        printf("职位\t:%s\n",person[i].job);
                        printf("班别\t:%d\n",person[i].category.banji);
                        printf("\n\n");
                }
                else
                {
                        printf("号码\t:%d\n",person[i].num);
                        printf("姓名\t:%s\n",person[i].name);
                        printf("性别\t:%s\n",person[i].sex);
                        printf("职位\t:%s\n",person[i].job);
                        printf("职务\t:%s\n",person[i].category.position);
                }
        }
       
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 21:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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