isalpha()函数为何过滤不出方向键、Insert、Home、Delete、End等键?

KaKaKaKa 2012-05-12 04:48:42

#include "ctype.h"
#include "conio.h"

int main()
{
char c;
while(1)
{
if(isalpha(c = getch()))
{
putch(c);
}
}

return 0;
}


控制台程序:
要求只能输入英文字母a-z或者A-Z
但上面这段程序 当你按了方向键Up、Down、Left、Right,或者F8、F9、Insert、Delete、Home、End等键后,
依然能打印出来呢? 为什么?
怎么能过滤掉这些呢?
谢谢
...全文
105 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
KaKaKaKa 2012-05-12
  • 打赏
  • 举报
回复
额 好吧 上vs2005试试
谢谢楼上
rendao0563 2012-05-12
  • 打赏
  • 举报
回复
VC6请绕行.
KaKaKaKa 2012-05-12
  • 打赏
  • 举报
回复
我是VC6 SP6
rendao0563 2012-05-12
  • 打赏
  • 举报
回复


怎么按都没发现. 手酸了. 你不是VC6吧.
KaKaKaKa 2012-05-12
  • 打赏
  • 举报
回复
笔记本上
迅速乱按键盘右上角一块 Insert Delete Home End 等
手指迅速连续的按 不要挺 你会发现的
rendao0563 2012-05-12
  • 打赏
  • 举报
回复
我怎么按都没出现你说的情况.
KaKaKaKa 2012-05-12
  • 打赏
  • 举报
回复
1楼岁岁草
你那个如果在Home End Delete之间快速狂按的话 还是会有打印出来的
KaKaKaKa 2012-05-12
  • 打赏
  • 举报
回复
MSDN:


The _getch function reads a single character from the console without echoing. _getche reads a single character from the console and echoes the character read. Neither function can be used to read CTRL+C. When reading a function key or an arrow key, _getch and _getche must be called twice; the first call returns 0 or 0xE0, and the second call returns the actual key code.

原来遇到功能键和方向键 会自动调用两次getch()
KaKaKaKa 2012-05-12
  • 打赏
  • 举报
回复
谢谢1楼岁岁草
2楼笨笨熊你那个跟我原来的是一样的 方向键等还是过滤不了的
W170532934 2012-05-12
  • 打赏
  • 举报
回复
自己判断吧。

#include "ctype.h"
#include "conio.h"

int main()
{
char c;
while(1)
{
if(c = getch())
{
if(c>='a'&&c<='z' || c>='A'&&c<='Z')
putch(c);
}
}

return 0;
}

rendao0563 2012-05-12
  • 打赏
  • 举报
回复


while(1)
{
int n = getch();
if(isalpha(n))
{
putch(n);
}
else if(!isprint(n))
{
n = getch();
}
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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