小弟想实现这么一个功能:限制长度输入。
我写的代码是这样:
#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缓冲区。
请大家帮我分析下原因。谢谢!