我们熟知的scanf()函数事实上并不是从键盘直接接受输入,而是检查键盘缓存。所以,初学者常常会对一些奇怪的输入问题感到困惑。先来看下面这段代码:
无论程序执行者是循规蹈矩地输入一个y然后按下回车,或者是输入yes后按下回车,程序都不会按照表面看起来那样让执行者进行下一次循环:
txi@ghosTunix:~/programming/c/test$ ./a.out y/n:y y/n:txi@ghosTunix:~/programming/c/test$
可以看到,在按下y+回车后,下一个循环直接跳过,并为执行。这是因为在第二个循环中,程序将回车,也就是"\n"赋值给了变量c,由于"\n"!='y',所以跳出了循环。通过清楚输入缓存,能够很好的解决这个问题:
清楚输入缓存并没有官方的方法,通过执行一个空while语句,可以将输入缓存“消耗”掉。 参考资料:http://www.c-faq.com,Question 12.26[ab] txi@ghosTunix:~$ date
int main(void)
{
int c='y',flush;
while(c=='y')
{
printf("y/n:");
scanf("%c",&c);
while((flush=getchar()) != '\n' && flush != EOF); /* 清除缓存 */
}
return 0;
}
2008年 05月 18日 星期日 08:50:31 CST
Host by is-Programmer.com | Power by Chito 1.3.3 beta