百思不得其解,为什么scanf函数没有在运行的时候实现功能?!!!红色部分不能实现的
int initlist(management &L)
{
char cod[10];
if(!L.head)
{
printf("ERROR:the system you want to init does not exist");
return ERROR;
}
record *p1;
p1=L.head;
p1=(record *)malloc(sizeof(record));
L.head->next=p1;
printf("现在,请输入您的初始个人信息\n");
printf("\n请输入您的姓名:\n");
scanf("%s",p1->data.name);
printf("\n您的姓名:%s\n",p1->data.name);
printf("\n\n请输入您的学号\n");
scanf("%d",&((*p1).data.num));
printf("\n您的学号:%d\n",p1->data.num);
printf("请输入您的性别,请输入'M' 或 'W'\n");
scanf("%c",&p1->data.sex);
printf("\n您的性别:%c\n",p1->data.sex);
printf("请输入您的出生日期,请按“年,月,日”的格式输入\n注意:年月日之间两两用逗号隔开\n");
scanf("%d,%d,%d",&(p1->data.birthday.year),&(p1->data.birthday.month),&(p1->data.birthday.day));
printf("\n出生日期:%d 年%d 月%d 日\n",p1->data.birthday.year,p1->data.birthday.month,p1->data.birthday.day);
printf("\n请输入您的专业\n");
scanf("%s",p1->data.major);
printf("\n您的专业是:%s\n",p1->data.major);
printf("请输入您的年级及班级信息,请按“年级,班级号”的格式输入\n注意:两者用逗号隔开\n");
scanf("%d,%d",&(p1->data.form.grade),&(p1->data.form.class_number));
printf("班级: 年级:%d 班级号:%d\n",p1->data.form.grade,p1->data.form.class_number);
printf("请输入您的家庭住址(注意中间不能有空格):\n");
scanf("%s",p1->data.address);
printf("\n您的家庭住址:%s\n",p1->data.address);
printf("\n请输入您的宿舍号\n");
scanf("%d",&(p1->data.dormitory));
printf("\n您的宿舍号是:%d\n",p1->data.dormitory);
loop2:printf("\n为了您的信息安全,请输入您的个人密码(密码不超过九个字符,且中间不能有空格字符):");
scanf("\n%s\n",p1->data.code);
printf("您输入的密码是:%s\n",p1->data.code);
printf("请再次输入您的密码以进行最终确认(密码不超过九个字符,且中间不能有空格字符)");
scanf("%s",cod);
if(strcmp(cod,p1->data.code)!=0)
{
printf("两次输入的密码不一致,请重新输入");
goto loop2;
}
printf("\n现在初始化完成,可以进行下一步操作\n");
p1->next=NULL;
p1->prior=L.head;
L.tail=p1;
p1=NULL;
return OK;
}
[解决办法]
scanf("%d",&((*p1).data.num));这一句后面加两句
scanf("%*[^\n]");
scanf("%*c");
原因是scanf有缓冲区 上一句的时候,你输入一个整数然后按回车确定,scanf读走了整数,但是回车还在缓冲区内,而回车符属于char,能被下一句的scanf("%c",&p1->data.sex)读走,所以这一句直接不等你输入就读取了回车执行结束了,所以需要清空缓冲里面的内容,以上两句可以用来清空缓冲。
[解决办法]
或者加上:fflush(stdin);