Ъγ:_小ツ雨oο 发表于 2014-1-23 22:22:02

共用体问题

#include<stdio.h>
struct
{
        int num;
        char name;
        char sex;
        char job;
        union
        {
                int banji;
                char position;
        }category;
}preson;
void main()
{
        int i;
        for(i=0;i<2;i++)
        {
                printf("input num\n");
                scanf("%d",&preson.num);
                printf("input name\n");
                scanf("%s",preson.name);
                printf("input sxe M/F\n");
                scanf("%c",&preson.sex);
                printf("input S/T,job\n");
                scanf("%c",&preson.job);
                if(preson.job=='S')
                {
                        printf("input class\n");
                        scanf("%d",&preson.category.banji);
                }
                if(preson.job=='T')
                {
                        printf("input zhiwu\n");
                        scanf("%s",&preson.category.position);
                }
                else
                {
                        printf("error!!\n");
                }
        }

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

牛头的主人 发表于 2014-1-23 22:22:03

第一个问题:scanf("%c",&preson.sex);这句和scanf("%c",&preson.job);这句。在C语言中,当输入字符时,会把你前面的那个回车当最字符,所以你读取的是回车,不是字符,可以有多种解决办法,一种在输入前面加个getchar();吃掉回车符;一种是用getche函数,还有其他的我就不介绍了。
第二个问题:你的if(preson.job=='S')和if(preson.job=='T')和else这3句句有个逻辑错误,如果你输入的是s无论如何都会error,好好看下问题所在。是不是该改为else if。
最后给你一句话,不怕错误,就怕没错误。

谭斌谭斌 发表于 2014-1-24 11:13:50

拿编译器自己一步步调试。

牡丹花下死做鬼 发表于 2014-1-24 11:44:24

楼主啊 谁喜欢帮你一句一句找错误啊 建议你 写上尽可能详细的注释 你的整体思路 和出现什么错误
不要只说有错误然后 给出一堆代码就完了

Ъγ:_小ツ雨oο 发表于 2014-1-24 12:25:54

牛头的主人 发表于 2014-1-24 00:02 static/image/common/back.gif
第一个问题:scanf("%c",&preson.sex);这句和scanf("%c",&preson.job);这句。在C语言中,当输入字符时,会把 ...

谢谢了,我 了解了 回了,,    新年快乐{:{:1_1:}

lpppl 发表于 2014-2-1 23:43:51

支持小甲鱼,赞点鱼币回来下载

wilsonbingo 发表于 2014-12-18 20:43:05

在纠结楼主这问题好久也没弄出来。求楼主贴出完整能运行的代码~谢谢

hiasaster 发表于 2015-4-11 22:10:57



#include<stdio.h>

struct
{
        int num;
        char name;
        char sex;
        char job;
        union
        {
                int banji;
                char position;
        }category;
       
}person;

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

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

        for(i=0;i<2;i++)
        {
                if(*(person.job) == *a)
                {
                        printf("号码\t:%d\n",person.num);
                        printf("姓名\t:%s\n",person.name);
                        printf("性别\t:%s\n",person.sex);
                        printf("职位\t:%s\n",person.job);
                        printf("班别\t:%d\n",person.category.banji);
                        printf("\n\n");
                }
                else
                {
                        printf("号码\t:%d\n",person.num);
                        printf("姓名\t:%s\n",person.name);
                        printf("性别\t:%s\n",person.sex);
                        printf("职位\t:%s\n",person.job);
                        printf("职务\t:%s\n",person.category.position);
                }
        }
       
}
页: [1]
查看完整版本: 共用体问题