c语言的问题。。。跳过了语句?

勇敢放上来求高手。
while (1)
{
printf("第几号入口来车:");
scanf("%d",&entry);
if (entry>x)
{
printf("好好想想,你应该知道没有这个入口的~~\n");
exit(1);
}
printf("\n请指明车的型号,大型车用L表示,中型车用M表示,小型车用S表示:");
a=getchar();
a=short_change(a);
printf("\n请输入里程数:");
scanf("%ld",&c);
if (c=='#'||entry=='#'||a=='#')
break;
switch (a)
{
case 'l':today_record.Lcar_distance+=c;break;
case 'm':today_record.Mcar_distance+=c;break;
case 's':today_record.Scar_distance+=c;break;
default:printf("\n我不认为有着一个型号的车,我想你弄错了\n");exit(1);
}

}
today_record.today_income=today_record.Lcar_distance*0.5+today_record.Mcar_distance*0.4+today_record.Scar_distance*0.3;
fprintf(fp,"%-10s,%-15.2lf,%-17.2lf,%-16.2f,%7.2lf\n",today_record.date,today_record.Lcar_distance,today_record.Mcar_distance,today_record.Scar_distance,today_record.today_income);
rewind(fp);``
编译器不报错,但是很奇怪的是跳过了(抑或是根本没执行)a=getchar();这一句而且后面的代码感觉执行起来都有问题,想不通为什么。
说明 today.record是一个结构体。

这是因为你前面有scanf("%d",&entry);
这句输入,你输入完后会敲一下回车键,表示你输入的结束,这个回车键会留在输入缓冲区内,当你使用a=getchar();是,他发现缓冲区内有字符,也就是那个回车键,他会在动将回车键赋给a,所以才出现跳过的现象。
你可以做如下修改:
scanf("%d",&entry);
后面接一句:getchar();用来吃掉回车键,这样就可以了。追问

谢谢,马上试之~~~~已解决~~~谢谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-26
scanf("%d",&entry);后面要加fflush(stdin)。如果不用,因为还有个换行符留在里面,你下次的getchar取到的是换行符。

》a=getchar();这一句而且后面的代码感觉执行起来都有问题,想不通为什么。
提问题,要把问题描述清楚。追问

好的。。好的,谢谢,一楼那位比较快。。委屈了

相似回答