|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 ZPCG 于 2011-10-6 15:47 编辑
问题我放在程序中,意思是如果连续几行都要用到scanf输入字符串或字符时,如何在保证某一句输入字符时,没等键盘的输入,他就直接要了上一句留在缓存里的回车,这个请大家看看你们一般是怎么解决此类问题的;还有这个程序输入完第一个记录后,就运行出错,帮忙看看.
- /*设有若干人员的数据,其中有学生和教师.学生的数据中包括:
- 姓名 号码 性别 职业 班级.教师的数据包括:姓名 号码 性别 职业 职务.
- 学生和教师所包含的数据中,班级和职务的变量是不同的类型,现要求
- 把他们放在同一表格中,即在多个链表中,其中有一些是学生,有一些是教师的*/
- #include <stdio.h>
- #include <malloc.h>
- struct stu //定义结构体
- {
- int num;
- char name[10];
- char job;
- union //共用体
- {
- int banji;
- char position[10];
- }category;
- struct stu *next;
- };
- struct stu *creat() //新建一个结构体
- {
- struct stu *p0;
- p0 = (struct stu *)malloc(sizeof(struct stu));
- printf("input num: ");
- scanf("%d", &p0->num);
- if(p0->num != 0)
- {
- printf("input name: ");
- scanf("%s", p0->name); //这里是输入字符串,然后再\n(回车)
- printf("input job(s/t): ");
- scanf("%c", &p0->job); //轮到这句输入时,他总是要了上一句中留在缓存区里的\n,而不是提示这行所需输入的值,
- if( p0->job == 's') //如果把上一句改成也用字符串形式,那本句中的p0->job == 's'又不好实现,
- {
- printf("input class: ");
- scanf("%d", &p0->category.banji);
- }
- else
- {
- printf("input position: ");
- scanf("%s", p0->category.position);
- }
- }
- return p0;
- };
- void print(struct stu *head)
- {
- printf("num\tname\tjob\tposition\n");
- while(head)
- {
- printf("num\tname\tjob\tposition\n");
- if(head->job == "s")
- printf("%d\t%s\t%s\t%d\n", head->num, head->name,head->job,head->category.banji);
- else
- printf("%d\t%s\t%s\t%s\n", head->num, head->name,head->job,head->category.position);
- head = head->next;
- }
- }
- void main()
- {
- struct stu *creat();
- void print(struct stu *head);
- struct stu *p1, *p2, *head;
- head = p1 = p2 = creat();
- while(1)
- {
- p1 = creat();
- if(p1->num ==0)
- {
- p2->next = NULL;
- break;
- }
- p2->next = p1;
- p2 = p1;
- }
- print(head);
- }
复制代码
|
|