请教:fflush函数的用法

wulongznt 2008-11-16 10:17:21
小弟想实现这么一个功能:限制长度输入。

我写的代码是这样:

#include <stdio.h>
#include <conio.h>

#define LEN 4 //LEN,表示输入的最大长度。

void main( void )
{
char ch;
char str[LEN+1];
int i=0;

while(1)
{
ch=getch();

switch(ch)
{
case 27: //Esc键
return;
break;

case 0: //功能键
case -32: //位移键
fflush(stdin); //这个地方,小弟不明白
break;

case 13: //回车键
str[i]=0;
return;
break;

case 8: //退格键
if (i>0)
{
printf("\b \b");
i--;
}
break;

default: //其他可打印的字符
if (i<LEN)
{
str[i]=ch; //将字符放入数组
putchar(ch); //屏幕回显
i++;
}
break;
}//end of switch
}//end of while
}

对于功能键、位移键,我想将它们屏蔽掉。所以,就想用fflush(stdin)来清除输入缓冲区。但是没有效果,当我输入位移键、或者F1~F12功能键,还是会读入到ch变量中,并回显到屏幕。也就是说,缓冲区没被清楚。

这是什么原因呢?我用的是getch函数接收单个字符的输入,难道是getch函数不走stdin缓冲区。

请大家帮我分析下原因。谢谢!

...全文
337 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
帅得不敢出门 2008-11-16
  • 打赏
  • 举报
回复
貌似要看fflush(stdin)的源码实现
Longinc 2008-11-16
  • 打赏
  • 举报
回复
不用的是什么编译器啊
这的文章你可以看看http://blog.163.com/anby1314125@126/blog/static/288754042008717102648440/
arong1234 2008-11-16
  • 打赏
  • 举报
回复
DOS这么点东西搞不明白就算了,搞明白了也没多大用处,现在谁这么搞stdin啊?都用GUI输入了
你fflush就flush了0和-32这两个字符,也许不包括你要刷掉的字符,你可以把你所有收到的字符打印一下,看看到底啥没有被刷掉。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧