鱼C论坛

 找回密码
 立即注册
查看: 3811|回复: 8

小甲鱼里的题目 大致写了一下 但有问题 求教

[复制链接]
发表于 2013-5-1 15:22:22 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 風信子 于 2013-5-1 15:38 编辑

题目:输入N个人信息, 共有信息有:学号,姓名,性别,职业为教师('t')则登记其单位为position,职业为学生('s')则登记为banji。 最后输出信息。
#include <stdio.h>

#define N 2

struct person
{
        int num;
        char name[20];
        char sex;
        char job;
        union
        {
                int banji;
                char position[20];
        }p;
}man[N];

void main()
{
        int i;
        for( i=0; i<N; i++ )                                      
        {
                printf("Please input number : ");
                scanf("%d", &man[i].num);
                printf("Please input name : ");
                scanf("%s", &man[i].name);
                printf("Please input sex(M/W) : ");
                scanf("%c", &man[i].sex);
                getchar();
                printf("Please input job(s/t) : ");
                scanf("%c", &man[i].job);
                getchar();
               
                if( man[i].job=='s')
                {
                        printf("PLease input banji : ");
                        scanf("%d", &man[i].p.banji);
                }
                else if( man[i].job=='t')
                {
                        printf("Please input position : ");
                        scanf("%s", &man[i].p.position);
                }
                printf("\n");
        }
        
        printf("num : \tname : \tsex : \t job : \t");         
        for( i=0; i<N; i++ )
        {
                if( man[i].job == 's')
                {
                        printf("%d\t%s\t%c\t%d\n", man[i].num, man[i].name, man[i].sex, man[i].p.banji);
                }
                else if( man[i].job == 't')
                {
                        printf("%d\t%s\t%c\t%s\n", man[i].num, man[i].name, man[i].sex, man[i].p.position);
                }
        }
}

为什么if和else if里面不执行?
可能是man.job == 's'条件识别不了, 但为什么呢
求解啊!

[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-2 00:16:24 | 显示全部楼层
复制到C-FREE里, 错误好多啊, 奇怪了。。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-2 00:25:39 | 显示全部楼层
本帖最后由 喜欢散步 于 2013-5-2 00:27 编辑

我觉得应是你上面的数据的输入有一些字符流到下面去了。 我试了在上面清除缓冲区, 之后就好了。
在上面加入这句:

/*上面一段代码。。。。。。。。。。。。。。。。。*/
  1. printf("Please input number : ");
  2.                 scanf("%d", &man[i].num);
  3.                 printf("Please input name : ");
  4.                 scanf("%s", &man[i].name);
  5.                 printf("Please input sex(M/W) : ");
  6.                 scanf("%c", &man[i].sex);
  7.                 while((ch = getchar()) != '\n')
  8.                         continue;                                //把上面的缓冲区先清除一下
  9.                 printf("Please input job(s/t) : ");
  10.                 scanf("%c", &man[i].job);
  11.                
  12.                 if(man[i].job == 's')
  13.                 {
  14.                         printf("PLease input banji : ");
复制代码
/*下面还有一段代码。。。。。。。。。。。。。。。。。。。。。。*/
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-2 01:05:56 | 显示全部楼层
我只是路过打酱油的。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-5-2 18:24:45 | 显示全部楼层
本帖最后由 風信子 于 2013-5-2 18:28 编辑

亲! 首先非常感谢你能够给我解答! 真是被感动的痛哭流涕……
但这样输出部分就有问题了,貌似sex里的内容变成\n了,这又怎么解决呢? 下面是 输出部分 代码,且 有图有真相

                               
登录/注册后可看大图
82WQEM~{]HN{KCILB{S7MFF.jpg
  1.         printf("num : \tname : \tsex : \tjob : \tclaxx/position : \n");
  2.         for( i=0; i<N; i++ )
  3.         {
  4.                
  5.                 if( man[i].job == 's')
  6.                 {
  7.                         printf("%d\t%s\t%c\t%c\t%d\n", man[i].num, man[i].name, man[i].sex, man[i].job, man[i].p.banji);
  8.                 }
  9.                 else if( man[i].job == 't')
  10.                 {
  11.                         printf("%d\t%s\t%c\t%c\t%s\n", man[i].num, man[i].name, man[i].sex, man[i].job, man[i].p.position);
  12.                 }
  13.         }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-3 02:54:04 | 显示全部楼层
風信子 发表于 2013-5-2 18:24
亲! 首先非常感谢你能够给我解答! 真是被感动的痛哭流涕……
但这样输出部分就有问题了,貌似sex里的 ...

帮你重新改了一下, 测试好像没问题

  1. /*题目:
  2. 输入N个人信息, 共有信息有:学号,姓名,性别
  3. 职业为教师('t')则登记其单位为position,
  4. 职业为学生('s')则登记为banji。
  5. 最后输出信息。
  6. */
  7. #include <stdio.h>

  8. #define N 2 //用于数组的个数

  9. struct person
  10. {
  11. int num;
  12. char name[20];
  13. char sex;
  14. char job;
  15. union
  16. {
  17. int banji;
  18. char position[20];
  19. }p;
  20. }man[N]; //结构体数组

  21. void main()
  22. {
  23. int i; //用于循环
  24. for( i=0; i<N; i++ )
  25. {
  26. printf("Please input number : ");
  27. scanf("%d", &man[i].num); //输入结构体数组变量
  28. printf("Please input name : ");
  29. scanf("%s", man[i].name); //字符串输入
  30. getchar();
  31. printf("Please input sex(M/W) : ");
  32. scanf("%c", &man[i].sex);
  33. getchar();
  34. printf("Please input job(s/t) : ");
  35. scanf("%c", &man[i].job);
  36. getchar();

  37. if( man[i].job == 's')
  38. {
  39. printf("PLease input banji : ");
  40. scanf("%d", &man[i].p.banji);
  41. }
  42. else if( man[i].job == 't')
  43. {
  44. printf("Please input position : ");
  45. scanf("%s", man[i].p.position); //字符串输入
  46. }
  47. printf("\n");
  48. }

  49. printf("num : \tname : \tsex : \t job : \t\n");
  50. for( i=0; i<N; i++ )
  51. {
  52. if( man[i].job == 's')
  53. {
  54. printf("%d\t%s\t%c\t%d\n", man[i].num, man[i].name, man[i].sex, man[i].p.banji);
  55. }
  56. else if( man[i].job == 't')
  57. {
  58. printf("%d\t%s\t%c\t%s\n", man[i].num, man[i].name, man[i].sex, man[i].p.position);
  59. }
  60. }
  61. }
复制代码

结果:

QQ截图20130503025114.png

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-5-3 09:21:36 | 显示全部楼层
问题主要有2个
1.man是个数组后面要有【】。
2 scanf %s或者%c连续用的话,需要getchar()来吸收缓冲区残余数据。
还有种方法是%c 的话 ,用“  %c”。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-5-3 11:02:40 | 显示全部楼层
喜欢散步 发表于 2013-5-3 02:54
帮你重新改了一下, 测试好像没问题

激动人心,无法言表!  谢谢O(∩_∩)O谢谢
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-5-3 11:04:08 | 显示全部楼层
wjb8love_9c7c9c 发表于 2013-5-3 09:21
问题主要有2个
1.man是个数组后面要有【】。
2 scanf %s或者%c连续用的话,需要getchar()来吸收缓冲区 ...

感恩无私的分享与奉献 :)   谢哈
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-29 21:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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