| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1047 人关注过本帖
标题:大家帮着看看,按照书上的代码打的,到底哪里有问题,....
只看楼主 加入收藏
cmefly
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-11-13
收藏
 问题点数:0 回复次数:8 
大家帮着看看,按照书上的代码打的,到底哪里有问题,....
设有若干个人员的数据,其中有学生和教师.学生的数据包括:姓名,号码,性别,职业,班级.教师的数据包括:姓名,号码,性别,职业,职务.如果职业是学生,第五项为该生所在班级,如果职业是教师,则第五项为该教师的职务.书上用结构体内嵌共用体来实现的,我编译的时候总是出错..

代码如下:struct
{
  int num;
  char name[10];
  char sex;
  char job;
  union
  {int class;
  char position[10];
  }category;
  }person[2];
main()
{
   int n,i;
   for(i=0;i<2;i++)
   {
    scanf("%d,%s,%c,%c",&person[i].num,person[i].name,&person[i].sex,
    &person[i].job);
    if(person[i].job=='s')
    scanf("%d",&person[i].category.class);
    else if(person[i].job=='t')
    scanf("%s",person[i].category.position);
    else printf("input error!");
    }
printf("\n");
printf("No.    Name    sex job        class/position\n");
for(i=0;i<2;i++)
{
  if(person[i].job=='s')
  printf("%d\t%s\t%c %c\t%d\n",person[i].num,person[i].name,person[i].sex,
  person[i].job,person[i].category.class);
  else
  printf("%d\t%s\t%c %c\t%s\n",person[i].num,person[i].name,person[i].sex,
  person[i].job,person[i].category.position);
}
}
运行后,我输入:
101
Li
f
程序输出input error!
我接着输入s,程序再次输出 input error!并且跳了出来...
按ALT+F5查看,程序输出如下结果:
No.    Name    sex job        class/position
101    Li    
f
0
请问是哪里出问题了...(源文件我已上传,各位也可以在自己的机器上运行下)
NONAME.rar (716 Bytes)
搜索更多相关主题的帖子: 代码 
2007-12-26 16:38
symos
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2007-9-15
收藏
得分:0 
scanf("%d,%s,%c,%c",&person[i].num,person[i].name,&person[i].sex,&person[i].job);
这里是用逗号间隔的输入的时候也应该用逗号分开.

2007-12-26 18:51
jxj777
Rank: 1
等 级:新手上路
帖 子:91
专家分:0
注 册:2007-10-27
收藏
得分:0 
SCANF输入格式要与定义时相符
101,li,f,s  用逗号隔开,
scanf()中%s把101后所有输入都表示字符串
建议分开输入,用多个scanf

[[italic] 本帖最后由 jxj777 于 2007-12-26 19:21 编辑 [/italic]]

一个人的力量是缈小的....... 互帮互助才是出路
2007-12-26 19:09
cmefly
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-11-13
收藏
得分:0 
还是不行,分开写也不行,你们可以在自己的机器上试试
2007-12-27 11:54
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
问题出现在char name[10];当输入的时候它会接受到10个字符,所以后面的变量没有接收到值
2007-12-27 12:59
無邪的睡脸
Rank: 2
等 级:等待验证会员
威 望:1
帖 子:344
专家分:13
注 册:2007-9-11
收藏
得分:0 
尽信书不如無书
2007-12-27 13:01
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
我这个程序能运行,考虑到你的思路所以保持原样了,你看看啊,你应该可以知道什么地方出问题了.#include<stdio.h>
struct
{
  int num;
  char name[4];
  char sex;
  char job;
  union
  {
      int  class1;
      char position[10];
  }category;
  }person[2];
main()
{
   int i;
   for(i=0;i<2;i++)
   {
       printf("No.    Name(4)    sex      job(s/t)        class/position\n");
       scanf("%d,%4s,%c,%c",&person[i].num,person[i].name,&person[i].sex,&person[i].job);
       if(person[i].job=='s')
       {
           printf("请输入班级:");
           scanf("%d",&person[i].category.class1);
       }
           else if(person[i].job=='t')
           {
            printf("请输入老师职位:");
           scanf("%10s",person[i].category.position);
           }
       else
           printf("input error!");
    }
printf("\n");
printf("No.   Name    sex    job     lass/position\n");
for(i=0;i<2;i++)
{
  if(person[i].job=='s')
     printf("%d\t%4s\t%c\t%c\t%d\n",person[i].num,person[i].name,person[i].sex,person[i].job,person[i].category.class1);
  else
  printf("%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);
}
}
2007-12-27 20:02
cmefly
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-11-13
收藏
得分:0 
楼上的程序是可以正常运行,但只限于4个字母的名字(%4S),如果名字多于或少于4个字母,问题依然存在,不过谢谢你的提醒,我好象知道问题所在了.....
应该是输入的时候%S和%C没有明确的界限,也就是(%S%C)即使中间加了逗号(%S,%C),但是如果字符串长度小于指定的长度,逗号依然会被当作合法字符送入字符串,如果此时长度依然不够,那么接下来输入的字符(%C)也会被当作合法字符送给字符串,初步分析是这样....具体结果还有待于实验.....
2007-12-28 13:22
cmefly
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-11-13
收藏
得分:0 
问题已解决,我们群老大告诉我的,只要在"%C"的时候加个空格用来存放回车就行了....
有在学习C和数据结构的朋友请加我:283049598
2007-12-29 10:40
快速回复:大家帮着看看,按照书上的代码打的,到底哪里有问题,....
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018403 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved