读书人

c-scanf键盘缓冲区残余信息有关问题

发布时间: 2012-12-28 10:29:05 作者: rapoo

c-scanf键盘缓冲区残余信息问题

键盘缓冲区残余信息问题?

#include <stdio.h>
int main()
{
??? int a;
??? char c;?
??? do
??? {
??????? scanf("%d",&a);
??????? scanf("%c",&c);
??????? printf("a=%d???? c=%c\n",a,c);
??????? /*printf("c=%d\n",c);*/
??? }while(c!=''N'');
}?
?? scanf("%c",&c);这句不能正常接收字符,什么原因呢?我们用printf("c=%d\n",c);将C用int表示出来,启用printf("c=%d\n",c);这一句,看看scanf()函数赋给C到底是什么,结果是 c=10 ,ASCII值为10是什么?换行即\n.对了,我们每击打一下"Enter"键,向键盘缓冲区发去一个“回车”(\r),一个“换行"(\n),在这里\r被scanf()函数处理掉了(姑且这么认为吧^_^),而\n被scanf()函数“错误”地赋给了c.?
解决办法:可以在两个scanf()函数之后加个fflush(stdin);,还有加getch(); getchar();也可以,但是要视具体scanf()语句加那个,这里就不分析了,读者自己去摸索吧。但是加fflush(stdin);不管什么情况都可行。?
函数名: fflush?
功 能: 清除一个流?
用 法: int fflush(FILE *stream);?
#include <stdio.h>
int main()
{
??? int a;
??? char c;?
??? do
??? {
??????? scanf("%d",&a);
??????? fflush(stdin);
??????? scanf("%c",&c);
??????? fflush(stdin);
??????? printf("a=%d???? c=%c\n",a,c);?
??? }while(c!=''N'');
}??????
这里再给一个用“空格符”来处理缓冲区残余信iv id="share_weibo">分享到:

读书人网 >编程

热点推荐