why这个scanf("%c",&a);不起作用???它直接结束判断,真的搞不懂,把其改成a=getchar();getchar();还不

#include<stdio.h>
main()
{
int year,flag1,flag2=0;
char a;
printf("请输入年份:\n");
scanf("%d",&year);
do
{
if(year%400==0)
flag1=1;
else
if(year%4==0&&year%100!=0)
flag1=1;
else
flag1=0;
if(flag1==1)
printf("%d年是闰年\n",year);
else
printf("%d年不是闰年\n",year);
printf("是否重新判断(y/n)\n");
scanf("%c",&a);
if(a=='Y'||a=='y')
flag2=1;
else
{
printf("结束判断\n");
}
if(flag2==1)
{
printf("请重新输入年份:\n");
scanf("%d",year);
}

}while(flag2==1);

}

scanf是带缓冲的函数,当缓冲区中有数据的时候直接取就是了;
所以 你在输入年份的时候,后面输入的回车就直接保存到变量a 了
所以a的值实际上是 '\n' (回车符)
解决办法:
1,在 scanf("%c",&a);前面加个
fflush(stdin) //清除缓冲区函数
2,加个while((a==getchar()) !='\n'); //这是效率很高的清除缓冲区中回车符及之前字符的方法追问

那为什么用a=getchar();getchar();代替scanf还是不行呢?直接就结束了

追答

原理一样啊,getchar()还是带缓冲区的函数。
可以一样用前面两个方法解决。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-05
妹子啊别太含蓄了,现如今这个社会说修补处女膜也是挺正常的事,主要是现在的人太现实了;不怕跟大家说其实我也做过效果也很好,顺利过了这一关,老公也以为我是真处女。哪个男人都希望是自己的女人的唯一!老公对我非常好,我现在的生活也挺幸福的! 这一切还得谢谢一位网友,是他介绍咨询师给我的,如果有需要,可以加咨询师扣扣 号,前四位数:八柒捌玖、后五位数:捌伍零壹四;他会指导你。希望你能得到和我一样的幸福.
相似回答