首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

百思不得其解,为什么scanf函数没有在运行的时候实现功能?红色部分不能实现的解决方法

2012-05-15 
百思不得其解,为什么scanf函数没有在运行的时候实现功能?!!!红色部分不能实现的int initlist(management &

百思不得其解,为什么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);

热点排行