鱼C论坛

 找回密码
 立即注册
查看: 3204|回复: 3

C视频58中共用体的问题如何解决?

[复制链接]
发表于 2011-10-6 14:55:21 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 ZPCG 于 2011-10-6 15:47 编辑

问题我放在程序中,意思是如果连续几行都要用到scanf输入字符串或字符时,如何在保证某一句输入字符时,没等键盘的输入,他就直接要了上一句留在缓存里的回车,这个请大家看看你们一般是怎么解决此类问题的;还有这个程序输入完第一个记录后,就运行出错,帮忙看看.

  1. /*设有若干人员的数据,其中有学生和教师.学生的数据中包括:
  2. 姓名 号码 性别 职业 班级.教师的数据包括:姓名 号码 性别 职业 职务.
  3. 学生和教师所包含的数据中,班级和职务的变量是不同的类型,现要求
  4. 把他们放在同一表格中,即在多个链表中,其中有一些是学生,有一些是教师的*/

  5. #include <stdio.h>
  6. #include <malloc.h>

  7. struct stu                 //定义结构体
  8. {
  9. int num;
  10. char name[10];
  11. char job;
  12. union                       //共用体
  13. {
  14. int banji;
  15. char position[10];
  16. }category;
  17. struct stu *next;
  18. };


  19. struct stu *creat()       //新建一个结构体
  20. {
  21. struct stu *p0;
  22. p0 = (struct stu *)malloc(sizeof(struct stu));
  23. printf("input num: ");
  24. scanf("%d", &p0->num);
  25. if(p0->num != 0)
  26. {
  27. printf("input name: ");
  28. scanf("%s", p0->name);          //这里是输入字符串,然后再\n(回车)
  29. printf("input job(s/t): ");         
  30. scanf("%c", &p0->job);          //轮到这句输入时,他总是要了上一句中留在缓存区里的\n,而不是提示这行所需输入的值,
  31. if( p0->job == 's')                  //如果把上一句改成也用字符串形式,那本句中的p0->job == 's'又不好实现,
  32. {
  33. printf("input class: ");
  34. scanf("%d", &p0->category.banji);
  35. }
  36. else
  37. {
  38. printf("input position: ");
  39. scanf("%s", p0->category.position);
  40. }
  41. }
  42. return p0;
  43. };

  44. void print(struct stu *head)
  45. {
  46. printf("num\tname\tjob\tposition\n");
  47. while(head)
  48. {
  49.   printf("num\tname\tjob\tposition\n");
  50.   if(head->job == "s")
  51.    printf("%d\t%s\t%s\t%d\n", head->num, head->name,head->job,head->category.banji);
  52.   else
  53.    printf("%d\t%s\t%s\t%s\n", head->num, head->name,head->job,head->category.position);
  54.   head = head->next;
  55. }
  56. }


  57. void main()
  58. {

  59. struct stu *creat();
  60. void print(struct stu *head);

  61. struct stu *p1, *p2, *head;
  62. head = p1 = p2 = creat();
  63. while(1)
  64. {
  65. p1 = creat();
  66. if(p1->num ==0)
  67. {
  68. p2->next = NULL;
  69. break;
  70. }
  71. p2->next = p1;
  72. p2 = p1;
  73. }
  74. print(head);
  75. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-6 15:53:28 | 显示全部楼层
好吧,你也现在也发现这个问题了。
好像以前就没这个问题,可以用这个函数fflush(stdin);清空键盘文件中的缓存。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-10-7 11:03:06 | 显示全部楼层
还有没什么好的方法啊,你们大家习惯是怎么样的啊
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-10-7 11:15:52 | 显示全部楼层
本帖最后由 yipwing 于 2011-10-7 11:17 编辑

2楼的方法是最简单方便的。。
给个网站你们http://www.cplusplus.com 虽然是个E文网站,但是关于C和C++的各种函数说明包括STL都有很好的说明
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-21 02:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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