为什么getch()函数可以工作两次?

时间:2013-09-02 14:17:42

标签: c count arrow-keys

我在C.写小程序 该程序的代码如下。

#include<stdio.h>
#include<conio.h>
int main()
{
  char ch;
  int count = 0;
  while(1){
   ch = getch();
   count++;
   printf("%d\n",count);
  }
  return 0;
}

当我按任意键计数增加逐个时运行此应用程序时, 但当我按箭头键计数增加两个
问题是什么。以及如何解决它?

操作系统:Windows 7
IDE:Dev-Cpp with MINGW

编辑#1:
当我在屏幕上打印时,如

printf("%d",ch);

它显示两位数:例如-32和左箭头键为77 那我该怎么办呢。

3 个答案:

答案 0 :(得分:1)

Windows的docs

  

“_getch and_getwch函数从中读取单个字符   控制台没有回应角色。这些功能都不是   用于读取CTRL + C.每次读取功能键或箭头键时   函数必须被调用两次;第一个调用返回0或0xE0,和   第二个调用返回实际的密钥代码。“

答案 1 :(得分:0)

原因很可能是因为箭头键由扫描码表示。通常是2个十六进制值。在你的情况下两个字符。您可以做的是打印ch并按箭头键查看打印的内容。

printf("%c\n",ch);

答案 2 :(得分:0)

按箭头然后退格检查。

在GCC中按向上箭头

出现以下字符串。这是三个字符的组合。

^[[A ==> ^[  [  A  

因为这个计数完全增加4加上Enter也。

要解决此问题,您可以将输入读入字符串,然后将第一个字符分配给c,但输入字符后需要按Enter键。在这里你有选择,如果你按箭头你有机会通过检查字符串长度来逃避计数增量和分配。

  char c,ch[2];
  int count = 0;
  while(1){
   scanf("%s",ch);
   c =ch[0];
   count++;
   printf("%ld\n",strlen(ch));
   printf("%d\n",count);
  }